Как получить количество столбцов между определенным диапазоном дат, не изменяя условие Where в SQL - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть таблица с номером счета, категорией группы и датой.

У меня есть запрос, который делает это

Select count(AccNum)
FROM Table
Where date BETWEEN '2020-02-01' AND '2020-03-31'
AND
group IN ('groupA','groupB')

Теперь есть ли способ заставить его работать вот так

Select count(AccNum) Where date between 2020-02-01 AND '2020-02-31' AS CountFebuary, count(AccNum) Where date between 2020-03-01 AND '2020-02-31' AS CountMarch,
FROM Table
Where date BETWEEN '2020-02-01' AND '2020-03-31'
AND
group IN ('groupA','groupB')

Я хочу иметь возможность получать общее количество счетов за каждый месяц без написания для него отдельного запроса. Это возможно?

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете выполнить условное агрегирование:

select 
    sum(case when date >= '2020-02-01' and date < '2020-03-01' then 1 else 0 end) cnt_february,
    sum(case when date >= '2020-03-01' and date < '2020-04-01' then 1 else 0 end) cnt_march
from mytable
where 
    date >= '2020-02-01' and date < '2020-04-01'
    and group IN ('groupA','groupB')

Поскольку вам нужны данные только за два месяца, мы можем немного сократить условные выражения:

select 
    sum(case when date <  '2020-03-01' then 1 else 0 end) cnt_february,
    sum(case when date >= '2020-03-01' then 1 else 0 end) cnt_march
from mytable
where 
    date >= '2020-02-01' and date < '2020-04-01'
    and group IN ('groupA','groupB')

Если вы работаете MySQL, мы можем сократить еще немного:

select 
    sum(date <  '2020-03-01') cnt_february,
    sum(date >= '2020-03-01') cnt_march
from mytable
where 
    date >= '2020-02-01' and date < '2020-04-01'
    and group IN ('groupA','groupB')

Примечание: group является зарезервированным словом в большинстве баз данных, поэтому не подходит для имени столбца.

...