当前位置: 首页 > 面试题库 >

MySQL Group by-获取零计数的列

汪胡非
2023-03-14
问题内容

我试着要求其他答案,但是没有运气,因此提出了要求。

我有一张桌子,其他年份也有几张类似的桌子,这是桌子的结构

--------------------------------
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|

如果我为Microsoft运行相同的软件,我会得到

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

这将找到所有可能的状态。如果您有一个包含所有可能状态的参考表,甚至更好,请使用它代替此查询。

然后,您通过状态和companyName在此表上进行LEFT
JOIN。这样,仅当表上有记录时,您才能在STATUS中获得匹配项。如果存在,则将1加到SUM,否则将添加0。

[sqlfiddle demo](http://sqlfiddle.com/#!2/b7cc3/9)



 类似资料:
  • 问题内容: 使用此链接中的代码将文本文件内容加载到GUI: 如果input.txt的内容为: 现在,我想计算HashMap中的值,但是计算存储在文本文件中的所有数据行。 我w’d想问我怎么能算的项目,即价值的?根据 作者的姓名 ,我怎么得到 4 号? __ 问题答案: 由于AUTHOR具有1对多的关系,因此应将其映射到结构而不是。 例如:

  • 问题内容: 我有一个如下所示的Pandas DataFrame: 我想跨列获取某个值的计数。所以我的预期输出是这样的: 我知道如何跨行执行此操作,但是对列执行此操作有点奇怪?请帮助我解决这个问题吗?谢谢。 问题答案: 首先将其堆叠,然后使用value_counts:

  • 问题内容: 我需要在应用程序中收集一些统计信息。我有一个用户表(tb_user),每当一个新用户访问该应用程序时,它将在该表中添加一条新记录,即每个用户一行。主要字段是 id 和 date_hour (用户首次访问该应用程序的时间戳)。 tb_user 我需要得到: 按日,周和月划分的平均用户数 例子: 每天:55.45 每周:XX.XX 月:XX.XX 编辑: 我最好的解决方案是: 但是,此解决

  • 我正在创建一个程序,将确定和打印数字奇数,偶数和零在一个整数从键盘。我尝试了几种不同的方法,每种方法都得到了相同的结果。我无法让java将0识别为0,而只能识别为偶数。例1005将给出2赔率和2平。

  • 问题内容: 我创建了以下存储过程,该过程用于计算所选位置的特定范围之间每天的记录数: 但问题是结果没有显示零记录的日子,我很确定这与我的WHERE语句有关,不允许显示零值,但我不知道该如何解决这个问题。 预先感谢尼尔 问题答案: 不是WHERE子句,而是GROUP BY。简而言之,查询将仅返回存在的行的数据。这意味着当您根据时间戳记的日期进行分组时,只会返回有行的日期。SQL Server从上下文

  • 问题内容: 如何从代码中获取任何kafka主题的分区数。我研究了许多链接,但似乎没有一个起作用。 提及一些: http://grokbase.com/t/kafka/users/148132gdzk/find-topic-partition-count- through-simpleclient-api http://grokbase.com/t/kafka/users/151cv3htga/ge