Diese Abfrage zählt alle Zeilen und zählt auch nur die Zeilen, in denen Attribute
ist nicht null, Gruppierung nach Jahr und Monat in Zeilen:
SELECT
Year(`date`),
Month(`date`),
Count(*) As Total_Rows,
Count(`Attribute`) As Rows_With_Attribute
FROM your_table
GROUP BY Year(`date`), Month(`date`)
(Dies liegt daran, dass Count(*) alle Zeilen zählt, Count(Attribute) alle Zeilen zählt, in denen Attribut nicht null ist)
Wenn Sie Ihre Tabelle in PIVOT benötigen, können Sie dies verwenden, um nur die Zeilen zu zählen, in denen das Attribut nicht null ist:
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`)
Und dies, um alle Zeilen zu zählen:
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`)
(Oder anstatt die ID zu zählen, können Sie Sum(Month(
Datum)=1)
wie in Kanders Antwort). Natürlich können Sie beide Abfragen hierin kombinieren:
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`)