sql >> Databasteknik >  >> RDS >> Mysql

Hur man grupperar efter år och månad i MySQL

Den här frågan kommer att räkna alla rader och räknar också bara de rader där Attribute är inte null, gruppering efter år och månad i rader:

SELECT
  Year(`date`),
  Month(`date`),
  Count(*) As Total_Rows,
  Count(`Attribute`) As Rows_With_Attribute
FROM your_table
GROUP BY Year(`date`), Month(`date`)

(detta eftersom Count(*) räknar alla rader, Count(Attibute) räknar alla rader där Attribute inte är null)

Om du behöver din tabell i PIVOT kan du använda detta för att bara räkna raderna där Attribute inte är null:

SELECT
  Year(`date`),
  Count(case when month(`date`)=1 then `Attribute` end) As Jan,
  Count(case when month(`date`)=2 then `Attribute` end) As Feb,
  Count(case when month(`date`)=3 then `Attribute` end) As Mar,
  ...
FROM your_table
GROUP BY Year(`date`)

Och detta för att räkna alla rader:

SELECT
  Year(`date`),
  Count(case when month(`date`)=1 then id end) As Jan,
  Count(case when month(`date`)=2 then id end) As Feb,
  Count(case when month(`date`)=3 then id end) As Mar,
  ...
FROM your_table
GROUP BY Year(`date`)

(eller istället för att räkna id kan du använda Sum(Month( datum)=1) som i kanders svar). Naturligtvis kan du kombinera båda frågorna till detta:

SELECT
  Year(`date`),
  Count(case when month(`date`)=1 then id end) As Jan_Tot,
  Count(case when month(`date`)=1 then `Attribute` end) As Jan_Attr,
  Count(case when month(`date`)=2 then id end) As Feb_Tot,
  Count(case when month(`date`)=2 then `Attribute` end) As Feb_Attr,
  Count(case when month(`date`)=3 then id end) As Mar_Tot,
  Count(case when month(`date`)=3 then `Attribute` end) As Mar_Attr,
  ...
FROM your_table
GROUP BY Year(`date`)


  1. Heroku:PG::ConnectionBad:kunde inte ansluta till servern:Anslutningen avvisades

  2. där 1=1 påstående

  3. Finns det någon skillnad mellan !=och <> i Oracle SQL?

  4. Försöker ladda upp användar-id till databasen, Session returnerar användar-id som null?