Вопрос

Так что обычно вы можете просто сделать

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. Если это не так, вы не получите результат.

У вас есть конкретная проблема в уме? Что вы пытаетесь сосчитать?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top