Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta MySQL com contagem e agrupamento por


Supondo que sua data seja uma datetime real coluna:
SELECT MONTH(date), YEAR(date), id_publisher, COUNT(*)
FROM raw_occurrence_record
GROUP BY MONTH(date), YEAR(date), id_publisher

Você pode concatenar seu mês e ano assim:
SELECT CONCAT(MONTH(date), '/', YEAR(date)) AS Month, id_publisher, COUNT(*)
FROM raw_occurrence_record
GROUP BY MONTH(date), YEAR(date), id_publisher

Para encontrar os meses em que não há registros, você precisará de uma tabela de datas. Se você não pode criar um, você pode UNION ALL uma tabela de calendário assim:
SELECT a.year, a.month, b.id_publisher, COUNT(b.id_publisher) AS num
FROM
  (SELECT 11 AS month, 2012 AS year
   UNION ALL
   SELECT 12, 2012
   UNION ALL
   SELECT 1, 2013
   UNION ALL
   SELECT 2, 2013) a
LEFT JOIN raw_occurence_record b
  ON YEAR(b.date) = a.year AND MONTH(b.date) = a.month
GROUP BY a.year, a.month, b.id_publisher

Veja uma demonstração