DB2 SQL: 如何 'count' having 子句返回的记录数量

DB2 SQL: How to 'count' the amount of records returned by a having clause

Table 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,所以我猜它只统计了整个文件。有什么想法吗?

On 方法是一个子查询:

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

如果您想要每一行中的值,请使用 window 函数:

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

分组依据通常需要一个条件(您要分组依据的内容,在本例中为 ZNMANE)和聚合(在本例中为 COUNT)。

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

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

你可以试试这个,看看你是否得到你需要的..