2009-08-28 25 views
159

Próbuję znaleźć kwerendę MySQL, która znajdzie różne wartości w określonym polu, policzyć liczbę wystąpień tej wartości, a następnie uporządkować wyniki według liczby.MySQL: Policz wystąpienia różnych wartości

przykład db

id   name 
-----  ------ 
1   Mark 
2   Mike 
3   Paul 
4   Mike 
5   Mike 
6   John 
7   Mark 

oczekiwany wynik

name  count 
-----  ----- 
Mike  3 
Mark  2 
Paul  1 
John  1 

Dzięki

Odpowiedz

317
SELECT name,COUNT(*) as count FROM tablename GROUP BY name ORDER BY count DESC; 
+1

Czym dokładnie jest ta grupa, robiąc tutaj? Nie jest jasne, jaki jest cel? Wygląda na to, że powinno to działać bez niego, jeśli po prostu czytasz to wyraźnie. – Prospero

+16

Podczas gdy kwerenda Amber jest poprawną odpowiedzią na pytanie, chciałbym poprawić jej komentarz, aby uniknąć sprowadzania nowych ludzi na manowce. Jeśli zostawisz "grupę po" w zapytaniu MySQL, nie dostaniesz [Mike, 1], [Mike, 1], otrzymasz pojedynczy wynik, który będzie nazwą pierwszego zwracanego wiersza, i liczba rzędów w tabeli, więc w tym przypadku [Mark, 7]. count(), jako funkcja agregująca działa na całym zestawie danych, sumując, licząc lub kończąc określone pole do jednego wiersza. Grupuj, dzieląc zbiór danych na porcje w oparciu o unikalne kombinacje określonych pól. –

+0

@Avatatar_Squadron Całkiem dobrze; Usunąłem poprzedni komentarz - było to z mojej strony, i nie mam tendencji do obserwowania wyników liczenia bez grupy przez wiele. :) – Amber

9

co o coś takiego:

select name, count(*) as num 
from your_table 
group by name 
order by count(*) desc 

Oznacza to, że wybierasz nazwę i liczbę wyświetleń; ale grupowanie według nazwy, więc każda nazwa jest wybierana tylko raz.

Następnie, zamawiaj przez wiele razy, desc; aby najczęściej pojawiali się użytkownicy.

+0

Twoje zapytanie pomogło mi. W wyniku zwraca kilka wierszy. Chciałem również dowiedzieć się, jak znaleźć liczbę tego wyniku. Wypróbowałem kilka zapytań, ale wydaje mi się, że nie można liczyć na dane zagregowane. Czy możesz w tym pomóc? – Nav

+0

@Nav - liczba czego? Liczba zwróconych wierszy? To jest "SELECT COUNT (DISTINCT name) as count from your_table" Dla liczby całkowitych wierszy tabeli, wykonaj zapytanie Pascala bez instrukcji 'group by'. –

+0

Co za różnica na minutę! –

0

Po prostu zmieniono LICZNIK Amber (*) na COUNT (1), aby uzyskać lepszą wydajność.

SELECT name, COUNT(1) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC; 
Powiązane problemy