J'ai une table de balises et je souhaite obtenir le plus grand nombre de balises de la liste.
Les exemples de données ressemblent à ceci
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
en utilisant
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
me récupère parfaitement les données que je recherche. Cependant, je voudrais l'organiser, de sorte que le nombre de balises le plus élevé soit en premier, et le limiter à m'envoyer uniquement les 20 premiers environ.
J'ai essayé ça ...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
et je reçois toujours un "Utilisation non valide de la fonction de groupe - ErrNr 1111"
Qu'est-ce que je fais mal?
J'utilise MySQL 4.1.25-Debian
mysql
sql
mysql-error-1111
maxsilver
la source
la source
MySQL avant la version 5 n'autorisait pas les fonctions d'agrégation dans les clauses ORDER BY.
Vous pouvez contourner cette limite avec la syntaxe obsolète:
1, car c'est la première colonne sur laquelle vous souhaitez regrouper.
la source
Je ne connais pas MySQL, mais dans MS SQL, vous pouvez utiliser l'index de colonne dans la
order by
clause. Je l'ai déjà fait lorsque je fais des décomptes avecgroup by
s car cela a tendance à être plus facile à travailler.Alors
Devient
la source
Dans Oracle, quelque chose comme ça fonctionne bien pour séparer un peu mieux votre comptage et votre commande. Je ne sais pas si cela fonctionnera dans MySql 4.
la source
) as counts
, mais cela fonctionnait toujours sans laas
pièce.Cette syntaxe n'est pas du tout obsolète, c'est E121-03 de SQL99.
la source
Essayez cette requête
la source