Tengo una tabla de etiquetas y quiero obtener las etiquetas de mayor recuento de la lista.
Los datos de muestra se ven así
id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')
utilizando
SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`
me devuelve los datos que estoy buscando perfectamente. Sin embargo, me gustaría organizarlo, para que los recuentos de etiquetas más altos sean los primeros, y limitarlo a que solo me envíe los primeros 20 más o menos.
Intenté esto ...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
y sigo recibiendo un "Uso no válido de la función de grupo - ErrNr 1111"
¿Qué estoy haciendo mal?
Estoy usando MySQL 4.1.25-Debian
mysql
sql
mysql-error-1111
maxsilver
fuente
fuente
MySQL anterior a la versión 5 no permitía funciones agregadas en las cláusulas ORDER BY.
Puede sortear este límite con la sintaxis obsoleta:
1, ya que es la primera columna en la que desea agrupar.
fuente
No sé acerca de MySQL, pero en MS SQL, puede usar el índice de columna en la
order by
cláusula. He hecho esto antes cuando hago cuentas congroup by
s, ya que tiende a ser más fácil trabajar con ellas.Entonces
Se convierte
fuente
En Oracle, algo como esto funciona muy bien para separar un poco el conteo y el pedido. No estoy seguro de si funcionará en MySql 4.
fuente
) as counts
, pero todavía funcionó sin laas
parte.Esta sintaxis no está en desuso en absoluto, es E121-03 de SQL99.
fuente
Prueba esta consulta
fuente