MySQL Group by – 获取零计数的列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL Group by – 获取零计数的列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1651字,纯文字阅读大概需要3分钟。
内容图文
我试着谴责其他答案,没有运气,因此问道.
我有一张桌子,其他几年与此相似
这是表结构
--------------------------------
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 |
缺少ZERO Count的那些.我希望那些带有ZERO Count的人也可以像下面那样被删除.
Certified | 0|
Cert-Denied | 0|
Denied | 1|
Withdrawn | 1|
我已经读过有关连接和东西的内容,但仍然不清楚.任何帮助将非常感激.
解决方法:
COUNT仅返回他为Microsoft找到的状态的COUNT.那些是Denied和Wthdrawn.您必须为查询提供所有状态,并计算所有状态的出现次数.未出现的那些将在表中留下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
这可以找到所有状态.如果您有一个包含所有可能状态的引用表,则更好使用它而不是此查询.
然后按status和companyName对此表执行LEFT JOIN.这样,如果表中有记录,您将只在STATUS中获得匹配.如果有,则向SUM添加1,否则添加0.
内容总结
以上是互联网集市为您收集整理的MySQL Group by – 获取零计数的列全部内容,希望文章能够帮你解决MySQL Group by – 获取零计数的列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。