【问题标题】:DB2 SQL: How to 'count' the amount of records returned by a having clauseDB2 SQL:如何“计算”have 子句返回的记录数量
【发布时间】:2016-04-13 05:25:05
【问题描述】:

表 XRDK/WHSHIPP_R3 有 4 列 - ZNWHSE、ZNSITE、ZNMANE、ZNRECD,共有 1,071 条记录。

我已经隔离了多次使用的 ZNMANE 号码;

SELECT ZNMANE FROM XRDK/WHSHIPP_R3
GROUP BY ZNMANE                   
HAVING (COUNT(ZNMANE) >1)         
ORDER BY 1

我想要这些孤立记录的总数,但如果我将其更改为;

SELECT COUNT(ZNMANE) FROM XRDK/WHSHIPP_R3
GROUP BY ZNMANE                   
HAVING (COUNT(ZNMANE) >1)         
ORDER BY 1

我只得到 2s 的负载,这必须是每个 ZNMANE 记录的单独计数。

我试过了;

SELECT ZNMANE FROM XRDK/WHSHIPP_R3
GROUP BY ZNMANE                   
HAVING (COUNT(ZNMANE) >1)         
ORDER BY 1                        
UNION ALL
SELECT COUNT(ZNMANE) FROM XRDK/WHSHIPP_R3

但这在顶部返回 1071,所以我猜它只是计算了整个文件。有什么想法吗?

【问题讨论】:

    标签: sql count db2 having


    【解决方案1】:

    On 方法是一个子查询:

    SELECT COUNT(*)
    FROM (SELECT ZNMANE
          FROM XRDK/WHSHIPP_R3
          GROUP BY ZNMANE                   
          HAVING COUNT(ZNMANE) > 1     
         ) z 
    

    如果你想要每一行的值,使用窗口函数:

          SELECT ZNMANE, COUNT(*) OVER () as NumTotal
          FROM XRDK/WHSHIPP_R3
          GROUP BY ZNMANE                   
          HAVING COUNT(ZNMANE) > 1     
    

    【讨论】:

    • 第一部分正是我想要的——谢谢。第二部分不起作用;说令牌(在 over () 内无效 - 有效令牌是 , FROM INTO 但我已经知道每个 ZNMANE 的计数都是 2。感谢您的帮助
    【解决方案2】:

    分组依据通常需要一个标准(您想要分组的依据,在这种情况下是 ZNMANE)和聚合(在这种情况下是 COUNT)。

    我认为您的第一个查询应该看起来更像

    SELECT ZNMANE
         , COUNT(1) 
      FROM XRDK/WHSHIPP_R3 
     GROUP 
        BY ZNMANE 
    HAVING (COUNT(1) > 1) 
     ORDER 
        BY 1
    

    你可以试试这个,看看你是否得到了你需要的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2014-09-03
      • 2021-10-21
      相关资源
      最近更新 更多