DB2 SQL:如何“计算”由having子句返回的记录数

6mw9ycah  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(258)

表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

我只是得到了一个负载的2,这必须是每个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,所以我猜它只是计算了整个文件。有什么想法吗?

wpcxdonn

wpcxdonn1#

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

8wtpewkr2#

分组依据通常需要一个条件(在本例中为ZNMANE)和一个聚合(在本例中为COUNT)。
我认为您第一个查询应该看起来更像

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

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

相关问题