Как мне считать записи MySQL с критерием HAVING
Так что обычно вы можете просто сделать
SELECT COUNT(field.id) FROM table WHERE field.id > 100
и COUNT(поле) вернет количество записей, у которых есть критерий field.id > 100
Но что делать, если вы подсчитываете записи, указанные с помощью критерия HAVING, такого как
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
код не будет работать в этом случае....
Как мне подсчитать записи, критерии которых указаны в предложении HAVING?
заранее спасибо
3 ответа
Что ж, COUNT
работает ДО HAVING
применяется к набору результатов. Так что если вам нужно посчитать их количество - вам нужно свернуть свой запрос с другим.
SELECT COUNT(*) FROM (
SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
Я не могу выполнить ни один запрос как есть - они выдают мне ошибку 1140 за "использование агрегата без предложения GROUP BY" (IE: COUNT(field.id)
). Кажется, что все совсем не относится к совокупности, просто возможность ссылаться на псевдоним столбца для сравнения...
Наиболее широко поддерживаемые средства:
SELECT field.id * 10 AS foo
FROM table
WHERE field.id * 10 > 100
MySQL поддерживает ссылку на псевдоним столбца в GROUP BY
или же HAVING
пункт. Это не требует использования обратных галочек, но я видел случаи, которые не работали (незарезервированные слова), пока не присутствовали обратные галочки:
SELECT field.id * 10 AS foo
FROM table
HAVING `foo` > 100
Я не рекомендую такой подход - он поддерживается на SQL Server, но не на Oracle...
HAVING
пункт похож на WHERE
оговорка, разница в том, что HAVING
Предложение поддерживает агрегатные функции без необходимости их оборачивания в подзапрос.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Я проверял это только на SQL Server
HAVING в этом случае будет выполнять любые агрегированные запросы по всему возвращенному набору. Прежде всего, вы не можете бежать
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
потому что field.id не содержится в предложении, которое определяет группу или агрегатную функцию; это просто не компилируется.
С учетом сказанного, следующий SQL -
SELECT COUNT(field.id) FROM table HAVING COUNT(field.id) > 100
вернет количество строк в таблице, если число больше 100. Если это не так, вы не получите никакого результата.
У вас есть конкретные проблемы? Что вы пытаетесь посчитать?