Próbuję znaleźć kwerendę MySQL, która znajdzie wartości DISTINCT w określonym polu, policzy liczbę wystąpień tej wartości, a następnie uporządkuje wyniki według liczby.
przykład db
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Mike
5 Mike
6 John
7 Mark
Spodziewany wynik
name count
----- -----
Mike 3
Mark 2
Paul 1
John 1
count(*) > 1
wwhere
klauzuli bo to zagregowanej funkcji. Otrzymasz również bardzo nieprzydatny komunikat: „Nieprawidłowe użycie funkcji grupy”. Prawo sposobem jest alias hrabianame,COUNT(*) as cnt
i dodać HAVING tak:HAVING count > 1
.HAVING
dotyczy warunków, które należy zastosować po agregacji, natomiastWHERE
dotyczy warunków, które należy zastosować przed nim. (Innym sposobem myślenia jest to, żeWHERE
dotyczy oryginalnych danych wiersza;HAVING
dotyczy wyjściowych danych wiersza.)Co powiesz na coś takiego:
Wybierasz nazwę i liczbę wyświetleń, ale grupujesz według nazwy, więc każda nazwa jest wybierana tylko raz.
Na koniec sortuj według liczby malejących zamówień, aby na pierwszym miejscu byli najczęściej pojawiający się użytkownicy.
źródło
SELECT COUNT(DISTINCT name) as count FROM your_table
Aby policzyć całkowitą liczbę wierszy tabeli, wykonaj zapytanie Pascala bezgroup by
instrukcji.Właśnie zmieniłem COUNT (*) Amber na COUNT (1) dla lepszej wydajności.
źródło