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
Вы можете попробовать это и посмотреть, если вы получите то, что вам нужно..