mysql - functions - SQL Group By con un orden por
mysql group by having (6)
Puede superar este límite con la sintaxis en desuso: PEDIR POR 1 DESC
Esta sintaxis no está en desuso, es E121-03 de SQL99.
Tengo una tabla de etiquetas y quiero obtener las etiquetas de mayor conteo 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 a la perfección. Sin embargo, me gustaría organizarlo, de modo que los recuentos de etiquetas más altos sean los primeros, y limitarlo a enviarme solamente los primeros 20 o más.
Intenté esto ...
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
y sigo obteniendo un "Uso no válido de la función de grupo - ErrNr 1111"
¿Qué estoy haciendo mal?
Estoy usando MySQL 4.1.25-Debian
En Oracle, algo como esto funciona bien para separar su conteo y ordenar un poco mejor. No estoy seguro si funcionará en MySql 4.
select ''Tag'', counts.cnt
from
(
select count(*) as cnt, ''Tag''
from ''images-tags''
group by ''tag''
) counts
order by counts.cnt desc
En todas las versiones de MySQL, simplemente alias el agregado en la lista SELECCIONAR y ordenar por el alias:
SELECT COUNT(id) AS theCount, `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY theCount DESC
LIMIT 20
MySQL anterior a la versión 5 no permitía agregar funciones en las cláusulas ORDER BY.
Puede superar este límite con la sintaxis obsoleta:
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY 1 DESC
LIMIT 20
1, ya que es la primera columna en la que desea agrupar.
No sé acerca de MySQL, pero en MS SQL, puede usar el índice de columna en la cláusula order by
. Ya he hecho esto antes cuando se cuenta con el group by
s, ya que suele ser más fácil trabajar con él.
Asi que
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20
Se convierte
SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER 1 DESC
LIMIT 20
Prueba esta consulta
SELECT data_collector_id , count (data_collector_id ) as frequency
from rent_flats
where is_contact_person_landlord = ''True''
GROUP BY data_collector_id
ORDER BY count(data_collector_id) DESC