首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询,以获取每个类别中的项目计数(显示包含0项的即使是空项)

查询,以获取每个类别中的项目计数(显示包含0项的即使是空项)
EN

Stack Overflow用户
提问于 2014-06-29 14:18:57
回答 3查看 228关注 0票数 0

我刚刚为我的表编写了以下查询:新闻和新闻-类别,以便计算每个类别的项目:

代码语言:javascript
复制
SELECT DISTINCT CAT.cid, CAT.c_title, N.n_category, count(*) AS cat_count
  FROM news N
 inner join news - categories CAT
    on CAT.cid = N.n_category
 GROUP BY N.n_category

但问题是,它只是告诉我的类别,其中包含新闻!但我可以得到所有的分类,即使是那些没有新闻的.

我的新闻列表是:

代码语言:javascript
复制
nid | n_category | etc

我的新闻分类表是:

代码语言:javascript
复制
cid | c_title | etc

谢谢你的帮忙

问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-29 14:28:57

使用LEFT JOIN

代码语言:javascript
复制
SELECT CAT.cid, CAT.c_title, IFNULL(COUNT(N.n_category), 0) AS cat_count
FROM `news-categories` AS CAT
LEFT JOIN news AS N ON CAT.cid = N.n_category
GROUP BY CAT.cid

注意: 1)必须在news表达式中使用来自COUNT()的列,而不是COUNT(*),这样才不会计算空匹配。2)不需要选择N.n_category,因为这总是等于CAT.cid,而且您已经在选择它了。3)按列分组必须来自news-categories表--不能按表中可能没有任何匹配行的列进行分组,因为该值始终是NULL

票数 0
EN

Stack Overflow用户

发布于 2014-06-29 14:24:15

试试这个:

代码语言:javascript
复制
SELECT
    CAT.cid,
    CAT.c_title,
    count(N.n_category) AS cat_count
FROM `news-categories` CAT 
    LEFT JOIN `news` N  
        ON CAT.cid = N.n_category  
GROUP BY CAT.cid,
    CAT.c_title
票数 1
EN

Stack Overflow用户

发布于 2014-06-29 14:33:00

我只想指出,您也可以通过一个子查询来完成这个任务:

代码语言:javascript
复制
SELECT CAT.cid, CAT.c_title,
       (SELECT COUNT(*) FROM news N WHERE CAT.cid = N.n_category)
FROM `news - categories` CAT;

在某些情况下,这甚至可以有更好的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24476904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档