Ответ 1
Предложение HAVING для агрегатов
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
Group By ItemMetaData.KEY, ItemMetaData.VALUE
HAVING count(*) > 2500
ORDER BY count(*) desc;
Я хочу выбрать различные ключи с номером вхождения, этот запрос кажется функционалом:
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
ORDER BY count(*) desc;
Но я также хочу отфильтровать этот результат, а это означает, что я хочу, только если count (*) больше 2500, поэтому будет показано только более 2500 случаев, но:
SELECT *
FROM
(
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
ORDER BY count(*) desc
) as result WHERE count(*)>2500;
К сожалению, этот запрос приводит к синтаксической ошибке. Можете ли вы помочь мне в достижении моего требования?
Предложение HAVING для агрегатов
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
Group By ItemMetaData.KEY, ItemMetaData.VALUE
HAVING count(*) > 2500
ORDER BY count(*) desc;
Вы должны использовать having
с функциями группы вместо where
. Например:.
select ..., count(*) from ... group by ... having count(*) > 2500;
Вам не нужно использовать подзапрос - просто используйте предложение having
вместо предложения where
для фильтрации агрегированным столбцом.
SELECT
ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
HAVING count(*) > 2500
ORDER BY count(*) desc
Вот объяснение: предложение WHERE
вводит условие для отдельных строк; Предложение HAVING
вводит условие об агрегации.
Используйте WHERE
до GROUP BY
и HAVING
после GROUP BY
. Это не обязательно, но полезно в большинстве случаев.
SELECT
ItemMetaData.KEY, ItemMetaData.VALUE, СOUNT(*)
FROM ItemMetaData
GROUP BY
ItemMetaData.KEY, ItemMetaData.VALUE
HAVING СOUNT(*) > 2500
ORDER BY СOUNT(*) DESC;