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

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

Другие вопросы по тегам