MySQL - Agrupar datos según apariciones

 
Vista:
sin imagen de perfil

Agrupar datos según apariciones

Publicado por lex (5 intervenciones) el 15/05/2018 10:42:32
Hola,

Tengo esta sentencia:

select campo_1 , count(*) as TOTAL FROM `tabla` group by campo_1 order by TOTAL DESC

Funcian corectametne y me ordena los datos por número de apariciones.
Lo que quisiera es que solo mostrara las que aparecien más de x veces.

Había probado esto pero, lógcamete, peta (no reconoce TOTAL en el where):

select campo_1 , count(*) as TOTAL FROM `tabla` where TOTAL>1000 group by campo_1 order by TOTAL DESC

Alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Agrupar datos según apariciones

Publicado por leonardo_josue (414 intervenciones) el 15/05/2018 16:41:45
Hola Lex:

Te comento que tal como estás tratando de hacer el filtro NO SE PUEDE REALIZAR, ya que el campo TOTAL es un campo calculado, por lo tanto "EXISTE" sólo hasta que se termina de ejecutar la consulta, no antes.

Para filtrar lo que quieres puedes hacerlo de dos formas:

1. EN LA SECCIÓN HAVING: Esta sección va de la mano con la sección GROUP BY y tiene como propósito justamente la evaluación de campos calculados, en tu caso, la consulta podría quedar así:

1
2
3
4
5
SELECT campo_1 , COUNT(*) as total
FROM `tabla`
GROUP BY campo_1
HAVING COUNT(*) > 1000
ORDER BY  total DESC;

Observa que en el HAVING tampoco puedes usar el ALIAS, sino que vuelves a colocar la función de agrupación COUNT(*).

2. UTILIZANDO SUBCONSULTAS. Esta no es la mejor manera, pero la dejo como cultura general, sería algo así:

1
2
3
4
5
6
7
SELECT * FROM
( SELECT campo_1 , COUNT(*) as total
  FROM `tabla`
  GROUP BY campo_1 ) T
WHERE
T.total > 1000
ORDER BY T.total DESC;

En este caso, al hacer una subconsulta, esta se ejecuta completamente Y ENTONCES YA EXISTEN LOS CAMPOS CALCULADOS, de tal suerte que en la consulta externa ya puedes hacer uso de los alias.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Agrupar datos según apariciones

Publicado por lex (5 intervenciones) el 15/05/2018 17:07:42
me cachis.... Having count(*) !! mira que sencillo era..
Muchas gracias Leo,

Y si quisiera eliminar los registros que cumplen con la condición?
He probado esto pero da error:

DELETE
FROM `tabla`
GROUP BY campo_1
HAVING COUNT(*) > 1000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar