mysql - sql按值计数按不同值堆栈pt.2

标签 mysql sql

previous question

我的数据库是这样的:

table1(article)
id | name | description | cat_id
0 | val1 |   desc1     |   1
1 | val2 |   desc2     |   2
2 | val3 |   desc3     |   1
3 | val4 |   desc4     |   2
4 | val5 |   desc5     |   1
5 | val6 |   desc6     |   2


table2(categories)
id | name 
0  | shoe
1  | glove
2  | hat

它应该返回:

articles_connected | categorie_name
        3          |  glove
        0          |  shoe
        3          |  hat

我认为这是一个很好的解决方案:

SELECT 
    COUNT(Category.id) as article_amount, Category.name
FROM 
    article_table as Article,
    category_table as Category
WHERE
    Category.id =  Article.cat_id
GROUP BY
    Category.id

但是我的代码不正确。此 SQL 查询不计入归零索引 它只计算大于 0 的值。如何更改以下查询以也计算 0 的索引?

SELECT 
        COUNT(Category.id) as articles_connected, Category.name
    FROM
        arcticle as Article,
        categories as Category
    WHERE
        Category.id = arcticle .categorie       
    GROUP BY
        Category.id

最佳答案

如果我理解正确,您没有鞋子连接,但想在结果中显示 Shoes = 0 (所以我忽略示例中 table1 的最后一列)。

如果您与 table2 联接,则找不到匹配项,因此鞋子不在您的结果查询中。 因此,在这种情况下,您可以使用左外连接:

SELECT 
    COUNT(Article.id) as articles_connected, Category.name
FROM categories as Category
left outer join arcticle as Article on  Category.id = arcticle .categorie       
GROUP BY
    Category.id

这样您就可以获得所有文章的计数,​​无论它们是否在表 1 中

关于mysql - sql按值计数按不同值堆栈pt.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404495/

相关文章:

javascript - Node.js 中的 MySQL 问题 - 获取所有查询

mysql - Select Projections.constructor 中的子查询

mysql - 即使该列存在于 mysql 表中,也会出现未知列错误

MySQL 多个 Where 子句

c# - 工作中断查询之谜

java - JDBC数据库访问、插入元组

mysql - 在距纬度/经度一定距离内查询时出现奇怪的结果

sql - 使用 COUNT(*) 或 SELECT * 是个好主意吗?

SQL Server - 动态列的 WHERE 子句

sql - CAST(somenumber as VARCHAR(10)) + somestring 返回将数据类型 varchar 转换为数字时出错