【问题标题】:Oracle SELECT COUNT(*) … GROUP BY … not returning rows where the count is zeroOracle SELECT COUNT(*) … GROUP BY … 不返回计数为零的行
【发布时间】:2010-10-20 03:19:59
【问题描述】:

我尝试了“mysql SELECT COUNT(*) ... GROUP BY ...不返回计数为零的行”中给出的解决方案,但它对我不起作用。

这里是 SQL ::

SELECT empid, SUM (total_records) total_records  
  FROM (SELECT ID,  
               (CASE WHEN ID LIKE '2%'  THEN '2____'  
                     WHEN ID LIKE '3%'  THEN '3____'  
                     WHEN ID LIKE '99%' THEN '99____'  
               END) empid,  
               total_records  
          FROM tr  
         where ( id like '2%' or id like '3%' or id like '99%'))  
GROUP BY empid;  

当 empid SUM 中的特定值为零时,该行不会显示在输出中。这表明我们没有该特定 empid 的数据(或总和)。但是是否可以在结果集中显示该特定值的“0”?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    为 ivanpro 和 Michael Goldshteyn 的答案添加细节,这里是一个带有虚拟“表”的演示,其中三个所需的 empid 值外部连接到原始查询

    SELECT a.empid, nvl(SUM (total_records),0) total_records  
      FROM (select '2____' empid from dual union select '3____' from dual 
                                           union select '99____' from dual) a 
           left outer join
           (SELECT ID,  
                   (CASE WHEN ID LIKE '2%'  THEN '2____'  
                         WHEN ID LIKE '3%'  THEN '3____'  
                         WHEN ID LIKE '99%' THEN '99____'  
                   END) empid,  
                   total_records  
           FROM tr 
           where ( id like '2%' or id like '3%' or id like '99%')) b 
         on a.empid = b.empid
    GROUP BY a.empid; 
    

    【讨论】:

      【解决方案2】:

      不使用此查询,您需要将其结果集与另一个查找缺失值的查询合并。

      【讨论】:

      • 好吧,如果我们没有empid的总和,那么应该显示它。示例: id = 196 的员工过去两个月的工资总额为零(两个月前辞职后)。在这种情况下,empid = 196 不会显示此 SQL 结果集。现在,如何显示该零值?
      • @Ashish:id 的值 196 不会超过产生 empid 的 CASE 语句,因此它不会出现在 SUM 中。
      • 啊,是的,这只是一个例子。我的意思是我们可以举个例子,比如empid 2xxxx系列员工。
      【解决方案3】:

      我认为您正在寻找 LEFT JOIN。使用它而不是嵌套的 SELECT 语句。我没有给你的例子,但这个 website 可能会对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 2016-10-19
        • 1970-01-01
        相关资源
        最近更新 更多