MySQL - использование COUNT (*) в предложении WHERE

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

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

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


person Community    schedule 19.11.2008    source источник


Ответы (9)


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

select gid
from `gd`
group by gid 
having count(*) > 10
order by lastupdated desc
person Ali Ersöz    schedule 19.11.2008
comment
+1 за то, что это всегда пункт, который они не учат должным образом на курсах или книгах sql, и знание об этом, как правило, является признаком того, что кодировщик продвинулся дальше уровня новичка. - person Cruachan; 19.11.2008
comment
Что, если вы пытаетесь использовать COUNT () как часть логического выражения OR? например AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0) - person nnyby; 14.10.2011
comment
Я разобрался .. вы можете добавить в предложение HAVING вот так: HAVING variations > 0 OR (stock = 1 OR quantity > 0) - person nnyby; 14.10.2011
comment
Отлично. Я мог бы поставить +2, если бы это было возможно. - person intumwa; 16.06.2021

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

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
person Greg    schedule 19.11.2008
comment
MSSQL выдает неверное имя столбца ошибку синтаксического анализа для num. +1 в любом случае за чистый синтаксис (может быть моя установка или мс ... ах ну). - person samis; 13.06.2017
comment
Задайте псевдоним для всех столбцов в выбранном. - person Adil Khalil; 15.06.2017

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
person Winston Smith    schedule 19.11.2008
comment
Спасибо, Джо, но это возвращает COUNT () - я хочу вернуть все gid, у которых COUNT (*) больше 10 - person ; 19.11.2008
comment
Там нет необходимости в Min (). - person Ali Ersöz; 19.11.2008

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

select *
from (
   select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;
person Máťa - Stitod.cz    schedule 10.09.2013

пытаться

SELECT DISTINCT gid
FROM `gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC
person sme    schedule 19.11.2008

В предложении 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;
person pushkarr    schedule 20.01.2016

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

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;

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

person zzapper    schedule 16.11.2011

COUNT (*) может использоваться только с HAVING и должен использоваться после оператора GROUP BY. Найдите следующий пример:

SELECT COUNT(*), M_Director.PID FROM Movie
INNER JOIN M_Director ON Movie.MID = M_Director.MID 
GROUP BY M_Director.PID
HAVING COUNT(*) > 10
ORDER BY COUNT(*) ASC
person Mridul Pandey    schedule 05.09.2019

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

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

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

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

select count(*) from table_name

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

person Tushar Pandey    schedule 05.04.2012