MySQL中如何选择所有类别并统计每个类别文章的数量

Posted

技术标签:

【中文标题】MySQL中如何选择所有类别并统计每个类别文章的数量【英文标题】:How to select all categories and count number of each category articles in MySQL 【发布时间】:2016-04-27 11:47:30 【问题描述】:

分类表:

id, name
---------
1   cat1
2   cat2
3   cat3 
4   cat4

文章表:

id, cid, title
--------------
1   1    title1
2   3    title2
3   1    title3
4   2    title4   

如何在mysql中选择所有类别并统计每个类别文章的数量?我需要一个 mysql 查询,它将选择属于每个类别的所有类别和文章总数,并按类别 ID 排序。

预期输出表:

+-------+-------+    
|  name | count |    
+-------+-------+    
|  cat1 |     2 |    
|  cat2 |     1 |    
|  cat3 |     1 |  
|  cat4 |     0 |  
+-------+-------+

【问题讨论】:

提示:LEFT JOINGROUP BY. 已经尝试过?寻找答案?嘿,这是 2 分钟的谷歌搜索.... 【参考方案1】:
SELECT
    c.`name`,
    COUNT(a.cid) AS `count`
FROM
    categories c
    LEFT JOIN article a ON c.id = a.cid
GROUP BY
    c.`name`
ORDER BY
    c.`name`

【讨论】:

【参考方案2】:

你也可以使用子查询

SELECT c.name,(select count(*) from article where cid = c.id) as count  FROM cat c WHERE 1 GROUP BY c.id 

【讨论】:

为什么 DV 这个答案?【参考方案3】:

试试这个:

SELECT c.`name`, count(a.cid) as count FROM category
LEFT JOIN article
ON c.id = a.cid
GROUP BY a.cid

【讨论】:

【参考方案4】:
select c.name,count(b.title)count from category a, article b where c.id = a.cid group by c.name order by a.cid;

【讨论】:

【参考方案5】:

我希望这会奏效。请检查。

select
    Category.name.
    ifnull(count(Article.cid),0) as count
FROM
    Category
LEFT JOIN
    Article 
on
    Article.cid=Category.id
group by
    Category.Id 

【讨论】:

以上是关于MySQL中如何选择所有类别并统计每个类别文章的数量的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 从每个类别中选择一个随机记录

选择所有产品并通过子类别加入主类别(未知级别)

选择每个类别的最后 3 条新闻 - 两个表 - (MySQL - PHP)

如何在 MySQL 中为每个类别创建一个 SQL 窗口函数列?

mysql最热门类别中最热门的文章[关闭]

MySQL选择多对多的位置