SQL-запрос, чтобы вывести месяцы, которых нет в столбце - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу посчитать количество строк по отношению к месяцу, который они записали в базу данных. В моей базе данных есть столбец с именем created_date. вы можете увидеть, что я сделал ниже:

select month(created_date) as "Month", count(created_date) as "Count" from transactions group by month(created_date)

то, что возвращает этот запрос, выглядит примерно так:

{'Month':1,'Count':10}

это происходит потому, что у меня есть только один месяц в моей базе данных, в то время какмне нужно, чтобы в результатах были все месяцы, включая месяцы, которых нет в базе данных, например:

{'Month':1,'Count':10}
{'Month':2,'Count':0}
{'Month':3,'Count':0}
{'Month':4,'Count':0}
{'Month':5,'Count':0}
{'Month':6,'Count':0}
{'Month':7,'Count':0}
{'Month':8,'Count':0}
{'Month':9,'Count':0}
{'Month':10,'Count':0}
{'Month':11,'Count':0}
{'Month':12,'Count':0}

как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

Вы можете JOIN к списку месяцев, чтобы вы могли получить строку даже для месяцев, которых нет в вашей таблице:

SELECT m.month,
       COUNT(t.created_date)
FROM (SELECT 1 AS month UNION ALL SELECT 2 UNION ALL SELECT 3
      UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
      UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
      UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) m
LEFT JOIN transactions t ON MONTH(t.created_date) = m.month
GROUP BY m.month
1 голос
/ 08 ноября 2019
SELECT * from
(
 SELECT 1 as month UNION ALL
 SELECT 2 as month UNION ALL
..
SELECT 12 as month 
) as months
left outer join
(
select month(created_date) as "Month", count(created_date) as "Count" from transactions group by month(created_date)
) as data
on (months.month=data.month)
ORDER BY months.month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...