Как мне считать записи MySQL с критерием HAVING - PullRequest
0 голосов
/ 20 сентября 2010

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

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 ]

5 голосов
/ 20 сентября 2010

Ну, COUNT работает ДО HAVING применяется к результирующему набору . Так что если вам нужно посчитать их количество - вам нужно обернуть ваш запрос другим.

SELECT COUNT(*) FROM (
    SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
2 голосов
/ 20 сентября 2010

Я не могу выполнить ни один запрос как есть - они выдают мне ошибку 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Сервер, но не Oracle ...

Предложение HAVING похоже на предложение WHERE, отличие состоит в том, что предложение HAVING поддерживает агрегатные функции без необходимости их переноса в подзапрос.

1 голос
/ 20 сентября 2010

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - я проверял это только на 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. Если это не так, вы не получите результата.

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

...