To zapytanie policzy wszystkie wiersze, a także policzy tylko wiersze, w których Attribute
nie ma wartości null, grupowanie według roku i miesiąca w wierszach:
SELECT
Year(`date`),
Month(`date`),
Count(*) As Total_Rows,
Count(`Attribute`) As Rows_With_Attribute
FROM your_table
GROUP BY Year(`date`), Month(`date`)
(ponieważ Count(*) zlicza wszystkie wiersze, Count(Attibute) zlicza wszystkie wiersze, w których atrybut Attribute nie jest pusty)
Jeśli potrzebujesz tabeli w trybie PIVOT, możesz użyć tego do policzenia tylko wierszy, w których atrybut nie jest pusty:
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`)
A to, aby policzyć wszystkie wiersze:
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`)
(lub zamiast liczenia id, możesz użyć Sum(Month(
data)=1)
jak w odpowiedzi Kandera). Oczywiście możesz połączyć oba zapytania w ten sposób:
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`)