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

Таблица 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 вверху, так что я думаю, что он просто посчитал весь файл. Любые идеи?


person Community    schedule 08.01.2016    source источник


Ответы (2)


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     
person Gordon Linoff    schedule 08.01.2016
comment
Первая часть именно то, что я хотел - спасибо. Вторая часть не работает; говорит, что токен (внутри более () недействителен - действительные токены , FROM INTO, но я уже знаю, что количество для каждого ZNMANE равно 2 в любом случае. Спасибо за вашу помощь - person ; 08.01.2016

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

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

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

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

person vmachan    schedule 08.01.2016