2008-11-19 4 views
118

Я пытаюсь выполнить следующие действия в MySQL (см pseudo код)MySQL - Использование COUNT (*) в ИНЕКЕ

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

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

Вся помощь приветствуется.

Спасибо!

ответ

11
SELECT COUNT(*) 
FROM `gd` 
GROUP BY gid 
HAVING COUNT(gid) > 10 
ORDER BY lastupdated DESC; 

EDIT (если вы просто хотите GIDs):

SELECT MIN(gid) 
FROM `gd` 
GROUP BY gid 
HAVING COUNT(gid) > 10 
ORDER BY lastupdated DESC 
+0

Спасибо Джо, но это возвращает COUNT() - Я ищу, чтобы вернуть все GID, который имеет COUNT (*) более 10 –

+1

Там нет необходимости в Min(). –

206

попробовать это;

select gid 
from `gd` 
group by gid 
having count(*) > 10 
order by lastupdated desc 
+25

+1 за то, что у Это * всегда * статья о том, что они не заботятся о том, чтобы правильно обучать на курсах или книгах sql и вообще знали, что кодер прогрессирует за новичком. – Cruachan

+0

Спасибо! Он работает –

+0

Исправлена ​​моя проблема, так спасибо. –

21

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

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC 
+0

MSSQL дает *« недопустимое имя столбца »* parse error для' num'. +1 в любом случае для чистого синтаксиса (может быть, моя настройка, или ms ... ahh well). – samosaris

+0

Предоставьте псевдоним для всех столбцов в списке. –

12

попробовать

SELECT DISTINCT gid 
FROM `gd` 
group by gid 
having count(*) > 10 
ORDER BY max(lastupdated) DESC 
+0

Спасибо! Оно работает –

4

- поиск метеостанций с недостающей половины -hourly records

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; 

- изменение o f yapiskan with a where .. in .. select

1

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

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

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

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

select count(*) from table_name 

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

9

Только академическая версия без оговорки:

select * 
from (
    select gid, count(*) as tmpcount from gd group by gid 
) as tmp 
where tmpcount > 10; 
3

Там не может быть агрегатные функции (. Ex 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; 
Смежные вопросы