Я запускаю следующий запрос в DB PostgreSQL, чтобы получить статус каждого канала в разные даты.Как добавить столбец в resultet для отображения count в PostgreSQL?
SELECT ch.name,
date(msg.date_created),
msg.status
FROM message msg,
channel ch
WHERE msg.status !='TRANSFORMED'
AND msg.channel_id = ch.id
AND msg.date_created BETWEEN to_date('2015-01-10', 'YYYY-MM-DD') AND to_date('2015-01-11', 'YYYY-MM-DD');
Он извлекает данные в следующем формате:
Channel_Name,Date,Status
CHANNEL_01,1/10/2015,SENT
CHANNEL_04,1/10/2015,QUEUED
CHANNEL_02,1/10/2015,QUEUED
CHANNEL_02,1/10/2015,FILTERED
CHANNEL_03,1/10/2015,QUEUED
CHANNEL_02,1/10/2015,SENT
CHANNEL_01,1/10/2015,SENT
CHANNEL_03,1/10/2015,ERROR
CHANNEL_01,1/10/2015,SENT
CHANNEL_03,1/10/2015,SENT
CHANNEL_03,1/10/2015,ERROR
CHANNEL_04,1/10/2015,SENT
CHANNEL_03,1/10/2015,SENT
CHANNEL_03,1/10/2015,FILTERED
CHANNEL_04,1/10/2015,ERROR
CHANNEL_03,1/10/2015,SENT
CHANNEL_03,1/10/2015,ERROR
CHANNEL_03,1/10/2015,SENT
CHANNEL_03,1/10/2015,FILTERED
CHANNEL_03,1/10/2015,QUEUED
CHANNEL_04,1/10/2015,FILTERED
Но я хочу рассчитывать статус сообщения и отображения в колонке, сгруппированных по имени и дате. Как мне переписать запрос с помощью «group by» для достижения ожидаемого результата следующим образом?
Channel_Name,Date,SENT,QUEUED,ERROR,FILTERED
CHANNEL_01,1/10/2015,3,0,0,0
CHANNEL_02,1/10/2015,1,0,0,1
CHANNEL_02,1/11/2015,0,1,0,0
CHANNEL_03,1/10/2015,3,2,1,2
CHANNEL_03,1/11/2015,1,0,2,0
CHANNEL_04,1/10/2015,1,1,1,1
... или используйте 'COUNT (CASE WHEN msg.status = 'SENT' THEN 1 ELSE NULL END) as SENT ' –
Спасибо Oleg & Todd. – Robie