Ich habe eine Tabelle mit Tags und möchte die Tags mit der höchsten Anzahl aus der Liste erhalten.
Beispieldaten sehen so aus
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
mit
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
bringt mir die Daten zurück, nach denen ich perfekt suche. Ich möchte es jedoch so organisieren, dass die höchsten Tag-Zählungen an erster Stelle stehen, und es so beschränken, dass mir nur die ersten 20 oder so gesendet werden.
Ich habe es versucht ...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
und ich bekomme immer wieder eine "Ungültige Verwendung der Gruppenfunktion - ErrNr 1111"
Was mache ich falsch?
Ich benutze MySQL 4.1.25-Debian
mysql
sql
mysql-error-1111
Maxsilber
quelle
quelle
MySQL vor Version 5 erlaubte keine Aggregatfunktionen in ORDER BY-Klauseln.
Sie können diese Grenze mit der veralteten Syntax umgehen:
1, da es die erste Spalte ist, in der Sie gruppieren möchten.
quelle
Ich weiß nichts über MySQL, aber in MS SQL können Sie den Spaltenindex in der
order by
Klausel verwenden. Ich habe dies schon einmal gemacht, wenn ich mitgroup by
s zähle, da es in der Regel einfacher ist, damit zu arbeiten.So
Wird
quelle
In Oracle funktioniert so etwas gut, um das Zählen und Bestellen ein wenig besser zu trennen. Ich bin nicht sicher, ob es in MySql 4 funktionieren wird.
quelle
) as counts
, aber es funktionierte immer noch ohne dasas
Teil.Diese Syntax ist überhaupt nicht veraltet, sondern E121-03 von SQL99.
quelle
Versuchen Sie diese Abfrage
quelle