SQL postgres aggregation/pivot of data by weeks with totals

孤者浪人 提交于 2019-12-11 04:39:20

问题


I have a table EventLogs which records a given Event's details such as the date of the event and the fee.

+------+----------+---------------------------+-------------------+
| id   | place_id | start_at                  | total_fee_pennies |
+------+----------+---------------------------+-------------------+
| 4242 | 40       | 2013-10-20 19:00:00 +0100 | 8700              |
| 4288 | 48       | 2013-10-22 20:00:00 +0100 | 8000              |
| 4228 | 141      | 2013-10-17 19:30:00 +0100 | 20000             |
| 4232 | 19       | 2013-10-20 19:30:00 +0100 | 8000              |
| 4239 | 5        | 2013-10-20 19:30:00 +0100 | 6800              |
| 4269 | 6        | 2013-10-20 20:00:00 +0100 | 7000              |
| 4234 | 98       | 2013-10-20 20:00:00 +0100 | 6900              |

I would like to be able to aggregate this data total fee by week, I believe this is a PIVOT?

So I'd select them for a given month:

"SELECT \"event_logs\".* FROM \"event_logs\"  WHERE (event_logs.start_at BETWEEN '2013-10-01' AND '2013-10-31')"

And then somehow aggregate them by distinct place_id and by week using start_at (5 weeks in a month, usually?) with the total fee for each week.

place_id, week 1, week2, ...

But I'm not sure how to do this?


回答1:


Here you can find how to extract the week number. Then use a Week number in the CASE statement

SQLFiddle demo

WITH T AS
(
SELECT
EventLogs.*
,
extract(week from start_at) - 
extract(week from date_trunc('month', start_at)) + 1 as WeekNo


 FROM EventLogs  
WHERE (start_at BETWEEN '2013-10-01' AND '2013-10-31')
)

SELECT
place_id,
SUM(CASE WHEN WeekNo=1 THEN total_fee_pennies ELSE 0 END) as Week_1,
SUM(CASE WHEN WeekNo=2 THEN total_fee_pennies ELSE 0 END) as Week_2,
SUM(CASE WHEN WeekNo=3 THEN total_fee_pennies ELSE 0 END) as Week_3,
SUM(CASE WHEN WeekNo=4 THEN total_fee_pennies ELSE 0 END) as Week_4,
SUM(CASE WHEN WeekNo=5 THEN total_fee_pennies ELSE 0 END) as Week_5

from T

GROUP BY place_id


来源:https://stackoverflow.com/questions/19709395/sql-postgres-aggregation-pivot-of-data-by-weeks-with-totals

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!