sql >> Database >  >> RDS >> Mysql

Hoe te groeperen op jaar en maand in MySQL

Deze zoekopdracht telt alle rijen en telt ook alleen de rijen waar Attribute is niet null, gegroepeerd op jaar en maand in rijen:

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

(dit omdat Count(*) alle rijen telt, Count(Attibute) alle rijen telt waar Attribute niet nul is)

Als je je tabel in PIVOT nodig hebt, kun je dit gebruiken om alleen de rijen te tellen waar Attribuut niet null is:

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`)

En dit om alle rijen te tellen:

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`)

(of, in plaats van id te tellen, kunt u Sum(Month( .) gebruiken datum)=1) zoals in het antwoord van Kander). Natuurlijk kunt u beide zoekopdrachten hierin combineren:

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. Django AttributeError 'float' object heeft geen attribuut 'split'

  2. SQL-injectie-aanvallen voorkomen met Python

  3. Hoe maak je een schema in Oracle met SQL Developer?

  4. CSV importeren om slechts één kolom in tabel bij te werken