2012-07-09 9 views
27

Chcę wybrać różne klucze z numerem Występowanie tego zapytania wydaje functionate:SQL COUNT * GROUP BY większy niż

SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
GROUP BY ItemMetaData.KEY 
ORDER BY count(*) desc; 

Ale chcę też filtrować te wyniki, co oznacza, chcę tylko, gdzie liczba (*) jest większa niż 2500 więc tylko większy niż 2500 występowanie będzie pokazane, ale:

SELECT * 
FROM 
(
    SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
    FROM ItemMetaData 
    GROUP BY ItemMetaData.KEY 
    ORDER BY count(*) desc 
) as result WHERE count(*)>2500; 

Niestety ta kwerenda powoduje błąd składni. Czy możesz mi pomóc spełnić moje wymagania?

+0

Ktoś właśnie usunął post chcę Zebrane prosimy napisał ją z powrotem, a ja przyjmuję to "SELECT * FROM ( SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count (*) 'ItemsCount' OD ItemMetaData GROUP BY ItemMetaData.KEY ) sub WHERE sub.ItemsCount> 2500 ORDER BY sub.ItemsCount desc; " Posiadanie działa również i naturalnie wszystkie inne odpowiedzi będą głosować, dziękuję, ale ... – czupe

Odpowiedz

52

klauzula HAVING dla agregatów

SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
Group By ItemMetaData.KEY, ItemMetaData.VALUE 
HAVING count(*) > 2500 
ORDER BY count(*) desc; 
8

Należy użyć having z funkcji grupowych zamiast where. Np .:

select ..., count(*) from ... group by ... having count(*) > 2500; 
6

Nie trzeba używać podkwerenda - wystarczy użyć having clause zamiast where klauzula filtrować przez kolumnę zagregowanym.

SELECT 
ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
GROUP BY ItemMetaData.KEY 
HAVING count(*) > 2500 
ORDER BY count(*) desc 
0

Oto wyjaśnienie: WHERE Klauzula wprowadza warunek w poszczególnych rzędach; HAVING Klauzula wprowadza warunek dotyczący agregacji.

Użyj WHERE przed GROUP BY i HAVING po GROUP BY. Nie jest to obowiązkowe, ale w większości przypadków pomocne.

SELECT 
     ItemMetaData.KEY, ItemMetaData.VALUE, СOUNT(*) 
FROM ItemMetaData 
GROUP BY 
     ItemMetaData.KEY, ItemMetaData.VALUE 
HAVING СOUNT(*) > 2500 
ORDER BY СOUNT(*) DESC;