MySQL - использование COUNT (*) в предложении WHERE - PullRequest
143 голосов
/ 19 ноября 2008

Я пытаюсь выполнить следующее в MySQL (см. pseudo код)

SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC

Есть ли способ сделать это без использования (SELECT ...) в предложении WHERE, поскольку это может показаться пустой тратой ресурсов.

Ответы [ 8 ]

245 голосов
/ 19 ноября 2008

попробуйте это;

select gid
from `gd`
group by gid 
having count(*) > 10
order by lastupdated desc
25 голосов
/ 19 ноября 2008

Я не уверен, что вы пытаетесь сделать ... может быть, что-то вроде

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
15 голосов
/ 19 ноября 2008
SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;

РЕДАКТИРОВАТЬ (если вы просто хотите, чтобы ставки):

SELECT MIN(gid)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC
14 голосов
/ 19 ноября 2008

1001 * попробовать *

SELECT DISTINCT gid
FROM `gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC
12 голосов
/ 10 сентября 2013

Только академическая версия без пункта:

select *
from (
   select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;
8 голосов
/ 20 января 2016

В предложении WHERE не может быть агрегатных функций (например, COUNT, MAX и т. Д.). Следовательно, вместо этого мы используем предложение HAVING. Поэтому весь запрос будет похож на это:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
6 голосов
/ 16 ноября 2011

- поиск метеостанций с отсутствующими получасовыми записями

SELECT stationid
FROM weather_data 
WHERE  `Timestamp` LIKE '2011-11-15 %'  AND 
stationid IN (SELECT `ID` FROM `weather_stations`)
GROUP BY stationid 
HAVING COUNT(*) != 48;

- вариант япискана с символом где .. в .. выберите

1 голос
/ 05 апреля 2012

Я думаю, вы не можете добавить count() с where. теперь понятно почему ....

where - это не то же самое, что having, having означает, что вы работаете или работаете с группой и выполняете ту же работу, что также относится ко всей группе,

Теперь, как считайте, это работает как целая группа

создайте таблицу и введите идентификаторы, а затем используйте:

select count(*) from table_name

вы найдете общие значения, означающие, что они указывают какую-то группу! поэтому where добавляется с count();

...