Consulta de contador mensual en MySQL

Escribí una consulta. La consulta y su salida se pueden encontrar a continuación.

ingrese la descripción de la imagen aquí

Bueno, necesito una consulta que tome esta consulta como una subconsulta y produzca un resultado como el siguiente. Preparé algunas consultas pero no funcionaron, en general traían valor nulo para cada mes. Puede haber otro enfoque mejor para este tipo de problemas. Acabo de probar así.

ingrese la descripción de la imagen aquí

Answer

Idealmente, tendrá que usar algo como PIVOT()en SQL. Desafortunadamente, no está disponible en MySQL. Así que esto funcionará:

SELECT customer, 
       MAX(CASE WHEN month='January' THEN total_count ELSE 0 END) AS Jan,
       MAX(CASE WHEN month='February' THEN total_count ELSE 0 END) AS Feb,
       MAX(CASE WHEN month='March' THEN total_count ELSE 0 END) AS Mar,
       MAX(CASE WHEN month='April' THEN total_count ELSE 0 END) AS Apr,
       MAX(CASE WHEN month='May' THEN total_count ELSE 0 END) AS May,
       MAX(CASE WHEN month='June' THEN total_count ELSE 0 END) AS Jun,
       MAX(CASE WHEN month='July' THEN total_count ELSE 0 END) AS Jul,
       MAX(CASE WHEN month='August' THEN total_count ELSE 0 END) AS Aug,
       MAX(CASE WHEN month='September' THEN total_count ELSE 0 END) AS Sep,
       MAX(CASE WHEN month='October' THEN total_count ELSE 0 END) AS Oct,
       MAX(CASE WHEN month='November' THEN total_count ELSE 0 END) AS Nov,
       MAX(CASE WHEN month='December' THEN total_count ELSE 0 END) AS Decem
FROM t
GROUP BY customer

Nota:

  • t debe ser reemplazado con su consulta completa como sub-query
  • Tomando MAX, MINo SUMnos dará el mismo resultado ya que ya está agrupado en monthy customernivel
  • Si desea usar Decpara el nombre de la última columna, utilícelo ya que, de lo "Dec"contrario, MySQL arrojará un error (debido a que se usa la palabra clave)

Mira la demostración en db<>fiddle