Итак, вы можете просто сделать
SELECT COUNT(field.id) FROM table WHERE field.id > 100
и COUNT (поле) вернет количество записей, у которых есть критерий поля .id > 100
Но тогда что, если вы хотите подсчитать записи, указанные с помощью критерия HAVING, такие как
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
код не будет работать в этом случае....
Как мне перейти на подсчет записей, чей критерий указан с помощью предложения HAVING?
Заранее спасибо
Ну, COUNT
работает ПЕРЕД HAVING
применяется к набору результатов . Поэтому, если вам нужно подсчитать их число - вам нужно обернуть свой запрос другим.
SELECT COUNT(*) FROM (
SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
Я не могу запустить запрос as-is - они дают мне ошибку 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
поддерживает агрегированные функции без необходимости их обертывания в подзапрос.
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. Если это не так, результат не получится.
У вас есть конкретная проблема? Что вы пытаетесь подсчитать?
GROUP BY
(IE:COUNT(field.id)
). Кажется, что все совсем не относится к агрегату, просто возможность ссылаться на псевдоним столбца для сравнения ...