Mam tabelę tagów i chcę uzyskać największą liczbę tagów z listy.
Przykładowe dane wyglądają następująco
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
za pomocą
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
odzyskuje dane, których szukam doskonale. Chciałbym jednak to zorganizować tak, aby najwyższe liczby tagów były pierwsze i ograniczyć je do wysyłania tylko pierwszych 20 lub więcej.
Próbowałem tego ...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
i ciągle otrzymuję komunikat „Nieprawidłowe użycie funkcji grupy - ErrNr 1111”
Co ja robię źle?
Używam MySQL 4.1.25-Debian
mysql
sql
mysql-error-1111
maxsilver
źródło
źródło
MySQL przed wersją 5 nie zezwalał na funkcje agregujące w klauzulach ORDER BY.
Możesz obejść ten limit za pomocą przestarzałej składni:
1, ponieważ jest to pierwsza kolumna, według której chcesz się zgrupować.
źródło
Nie wiem o MySQL, ale w MS SQL możesz użyć indeksu kolumny w
order by
klauzuli. Robiłem to już wcześniej, gdy liczyłem zgroup by
s, ponieważ jest to łatwiejsze w użyciu.Więc
Staje się
źródło
W Oracle coś takiego działa ładnie, aby trochę lepiej oddzielić liczenie od zamawiania. Nie jestem pewien, czy zadziała w MySql 4.
źródło
) as counts
, ale i tak działało bez tejas
części.Ta składnia nie jest w ogóle przestarzała, to E121-03 z SQL99.
źródło
Spróbuj tego zapytania
źródło