DB2 SQL: как "подсчитать" количество записей, возвращаемых предложением has

Таблица XRDK/WHSHIPP_R3 имеет 4 столбца - ZNWHSE, ZNSITE, ZNMANE, ZNRECD с общим количеством 1071 записей.

Я выделил номера 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 в верхней части, так что, я думаю, это всего лишь файл. Есть идеи?

2 ответа

Решение

По методу есть подзапрос:

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     

Группе обычно нужны критерии (по которым вы хотите группировать, в данном случае ZNMANE) и совокупность (в этом случае COUNT).

Я думаю, что ваш первый запрос должен выглядеть более похожим

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

Вы можете попробовать это и посмотреть, если вы получите то, что вам нужно..

Другие вопросы по тегам