【问题标题】:SQL Server Select Count in JoinSQL Server 连接中的选择计数
【发布时间】:2016-07-29 08:30:28
【问题描述】:

我需要获取 News 的计数,它给了我错误

选择列表中的“News.NewsId”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

select    News.NewsId
        , News.NewsTitle
        , COUNT(News.NewsId) as Total 
from News inner join NewsCategory on News.NewsId = NewsCategory.NewsId
where NewsCategory.CategoryId in (Select CategoryId 
                                  from Category 
                                  where CategoryName = 'travel' 
                                    or  CategoryName = 'Technology' 
                                    or  CategoryName = 'Sport')

【问题讨论】:

  • 您要按newsid 汇总结果吗?意思是你想要返回多条记录吗?如果是这样,您只是缺少group by 子句。将此添加到末尾:group by news.newsid, news.newstitle... 如果没有,您应该更好地定义您的问题...

标签: sql sql-server


【解决方案1】:

像这样使用 ti:

select    News.NewsId, News.NewsTitle, COUNT(News.NewsId) as Total from News  group by  News.NewsId, News.NewsTitle
inner join 
NewsCategory
on News.NewsId = NewsCategory.NewsId where NewsCategory.CategoryId in (Select CategoryId from Category where CategoryName = 'travel' or  CategoryName = 'Technology' or CategoryName = 'Sport')'Technology' or CategoryName = 'Sport')

您正在使用计数,这就是您需要按字段分组的原因,包括在您的计数中(News.NewsId)

这个根据每个 NewsId 显示每个类别的计数:

select count(1), a.NewsId, a.NewsTitle,b.category from
(select  NewsId, NewsTitle from tbl_news)as a


left JOIN

(select    NewsId, categoryid,Category  from tbl_category) as b
on a.newsid = b.newsid GROUP BY a.NewsTitle,b.category 

【讨论】:

  • 它正在工作,谢谢 :) 但是计数始终为 1,我需要获取计数或每个类别下的新闻数量。比如体育类有 2 条新闻,科技类有 4 条新闻,你能帮我解决这个问题吗,谢谢
  • 你的意思是每个类别的计数?
  • 是的...非常感谢您的帮助:)
  • 你好,你在吗?
  • 我什至不知道你的数据库设计......只是为你做一些解决方案。希望您可以在此处为您的结果添加更多详细信息
【解决方案2】:

您需要按NewsIdNewsTitle 列分组

select    News.NewsId
        , News.NewsTitle
        , COUNT(News.NewsId) as Total 
from News inner join NewsCategory on News.NewsId = NewsCategory.NewsId
where NewsCategory.CategoryId in 
                        (Select CategoryId 
                         from Category 
                         where CategoryName IN ('travel','Technology','Sport'))
GROUP BY News.NewsId
        , News.NewsTitle

或者你可以把查询写成

select    News.NewsId
        , News.NewsTitle
        , COUNT(News.NewsId) as Total 
from News 
inner join NewsCategory on News.NewsId = NewsCategory.NewsId
inner join Category     on Category.CategoryId = NewsCategory.CategoryId
where Category.CategoryName IN ('travel','Technology','Sport'))
GROUP BY News.NewsId, News.NewsTitle

【讨论】:

    【解决方案3】:

    只需使用两个连接和一个group by 编写此代码:

    select n.NewsId, n.NewsTitle, COUNT(*) as Total 
    from News n inner join
         NewsCategory nc
         on n.NewsId = nc.NewsId join
         Category c
         on nc.CategoryId = c.CategoryId
    where c.CategoryName in ('travel', 'Technology', 'Sport')
    group by n.NewsId, n.NewsTitle;
    

    【讨论】:

    • 它正在工作,谢谢:) 但计数始终为 1,我需要获取每个类别下的 Count 或新闻数量。比如体育类有 2 条新闻,科技类有 4 条新闻,你能帮我解决这个问题吗,谢谢
    猜你喜欢
    • 2012-01-31
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2016-08-27
    相关资源
    最近更新 更多