sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga med räkning och grupp efter

Förutsatt att ditt datum är en faktisk datetime kolumn:

SELECT MONTH(date), YEAR(date), id_publisher, COUNT(*)
FROM raw_occurrence_record
GROUP BY MONTH(date), YEAR(date), id_publisher

Du kan sammanfoga din månad och år så här:

SELECT CONCAT(MONTH(date), '/', YEAR(date)) AS Month, id_publisher, COUNT(*)
FROM raw_occurrence_record
GROUP BY MONTH(date), YEAR(date), id_publisher

För att hitta månader där det inte finns några poster behöver du en datumtabell. Om du inte kan skapa en kan du UNION ALL en kalendertabell som så:

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

Se en demo




  1. Varför find_in_set fungerar men IN-klausul

  2. Använder MySQL med Entity Framework

  3. Flask-SQLAlchemy Gemener Index - hoppa över funktion, stöds inte av SQLAlchemy-reflektion

  4. mysqli_query() returnerar alltid sant