gpt4 book ai didi

MySQL Group by - 获取计数为零的列

转载 作者:可可西里 更新时间:2023-11-01 08:06:01 25 4
gpt4 key购买 nike

我试过谴责其他答案,但运气不好,所以才问。

其他年份我有一张 table 和几张类似的 table 这是表结构

--------------------------------
STATUS | Year | Company Name
--------------------------------
Certified | 2010 | Google
Cert-Denied | 2010 | Google
Denied | 2010 | Google
Withdrawn | 2010 | Google

Denied | 2010 | Microsoft
Withdrawn | 2010 | Microsoft
Certified | 2010 | Apple
Cert-Denied | 2010 | Apple
----------------------------------

当我编写查询以列出一年中的所有公司 GROUP BY STATUS 时,我想查看与状态计数对应的所有条目,包括零计数。

如果我在 Google 上搜索,我会得到这样的结果

Query : Select status, count(*) from table where company like '%Google%' group by status

结果:

Certified    | 1| 
Cert-Denied | 1|
Denied | 1|
Withdrawn | 1|

如果我为微软运行同样的程序,我会得到

Denied       | 1|
Withdrawn | 1 |

零计数的丢失了。我希望计数为零的那些也像下面这样显示。

Certified    | 0| 
Cert-Denied | 0|
Denied | 1|
Withdrawn | 1|

我已经阅读了有关连接和内容的内容,但仍然不清楚。任何帮助将非常感激。

最佳答案

COUNT 仅返回他为 Microsoft 找到的状态的 COUNT。那些被拒绝和撤回。您必须向查询提供所有状态并计算所有状态的出现次数。没有出现的将在表格中留下0:

SELECT a.STATUS, 
SUM(CASE
WHEN b.STATUS IS NOT NULL
THEN 1
ELSE 0
END) AS StatusCount
FROM (
SELECT DISTINCT STATUS
FROM tab1
) a
LEFT JOIN tab1 b ON a.STATUS = b.STATUS AND b.CompanyName = 'Microsoft'
GROUP BY a.STATUS;

它的作用是:

SELECT DISTINCT STATUS
FROM tab1

这会找到所有可能的状态。如果您有包含所有可能状态的引用表,最好使用它而不是此查询。

然后您根据状态和公司名称在此表上执行 LEFT JOIN。这样,如果表上有记录,您只会在 STATUS 中获得匹配项。如果存在,则将 SUM 加 1,否则加 0。

sqlfiddle demo

关于MySQL Group by - 获取计数为零的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com