Как мне посчитать записи MySQL с помощью критерия
-
04-10-2019 - |
Вопрос
Так что обычно вы можете просто сделать
SELECT COUNT(field.id) FROM table WHERE field.id > 100
и счет (поле) вернет количество записей, которые имеют критерий field.id> 100
Но тогда что, если вы, что считать записи, указанные с помощью критерия, такого как
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
Код не будет работать в этом случае ....
Как я могу пойти касаться подсчета записей, чей критерий указывается через предложение имеет?
заранее спасибо
Решение
Хорошо, COUNT
работает ДО HAVING
применяется к Набор результатов. Отказ Поэтому, если вам нужно считать их номер - вы должны обернуть ваш запрос с другим.
SELECT COUNT(*) FROM (
SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
Другие советы
Я не могу запустить либо запрос как есть - они дают мне ошибку 1140 для «Использование агрегата без группового пункта» (т. Е. COUNT(field.id)
). Кажется, что все не относится к агрегату вообще, просто способность ссылаться на псевдоним столбца для сравнения ...
Наиболее широко поддерживаемыми средствами является:
SELECT field.id * 10 AS foo
FROM table
WHERE field.id * 10 > 100
Mysql поддерживает ссылку на псевдоним столбца в GROUP BY
или HAVING
пункт. Это не требует использования BackTicks, но я видел экземпляры, которые не будут работать (не зарезервированные слова) до тех пор, пока не присутствовали отзывы:
SELECT field.id * 10 AS foo
FROM table
HAVING `foo` > 100
Я не рекомендую этот подход - он поддерживается на SQL Server, но не Oracle ...
То HAVING
пункт как WHERE
пункт, разница в том, что HAVING
пункт поддерживает агрегатные функции, не требуя их завернутых в подзапросе.
Отказ от ответственности - я проверил это только на SQL Server
Наличие в этом случае будет выполнять только какие-либо совокупные запросы по всему возвращенному набору. Прежде всего, вы не можете бежать
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. Если это не так, вы не получите результат.
У вас есть конкретная проблема в уме? Что вы пытаетесь сосчитать?