funciones ejemplos datos consultas clausula agrupamiento agrupadas agregado agregadas mysql sql group-by

mysql - ejemplos - SUM() todos los resultados(sin grupo por cláusula)



having mysql (1)

Estoy teniendo un extraño error. Tengo un código SQL que se ve así:

SELECT adverse_reaction_type_id, SUM(CASE adverse_reaction_type_id WHEN 1 THEN `number` ELSE 0 END ) line, SUM(CASE adverse_reaction_type_id WHEN 2 THEN `number` ELSE 0 END ) drug FROM core_reports_adverse_reactions, ... WHERE ...

Esto funciona bien en mi instalación de MAMP, pero no en mi servidor remoto. Supongo que hay una opción de configuración en alguna parte que impide que funcione.

Este es el error que estoy recibiendo:

La mezcla de columnas GROUP (MIN (), MAX (), COUNT (), ...) sin columnas GROUP es ilegal si no hay una cláusula GROUP BY

Sé lo que el error me está diciendo, pero el problema es que no quiero agrupar por nada. Quiero obtener todos los resultados donde coincida el bit where (eliminado para mayor brevedad) y luego devuelva el SUM() de la columna number (como line o drug según la cláusula CASE ).

Entonces, esencialmente, independientemente de lo que coincida con la cláusula WHERE todo lo que quiero devolver es 1 fila:

line | drug ----------- 10 | 32

¿Hay alguna forma de evitar esto? O de cualquier forma, ¿puedo GROUP BY nothing o algo?


Puede GROUP una constante en la tabla donde ejecuta el SELECT .

Por ejemplo GROUP BY NULL :

mysql> select SUM(CASE WHEN product_id = 0 THEN -1 ELSE product_id END) AS sumprod, SUM(quantity) AS sumquant FROM orders GROUP BY NULL; +---------+----------+ | sumprod | sumquant | +---------+----------+ | 4 | 8 | +---------+----------+ 1 row in set (0.00 sec) mysql> select version(); +-------------+ | version() | +-------------+ | 5.5.25a-log | +-------------+ 1 row in set (0.00 sec)

Pero generalmente este error significa que hay al menos una columna que no está agrupada.

Puede ser que la versión de producción de MySQL quede desconcertada al usar un CASE dentro de la función agregada.