gpt4 book ai didi

SQL postgres 聚合/数据透视(按周计)

转载 作者:行者123 更新时间:2023-11-29 12:13:18 24 4
gpt4 key购买 nike

我有一个 EventLogs 表,它记录了给定事件的详细信息,例如事件日期和费用。

+------+----------+---------------------------+-------------------+
| 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 |

我希望能够按周汇总此数据总费用,我相信这是一个 PIVOT?

所以我会为给定的月份选择它们:

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

然后以某种方式通过不同的 place_id 和使用 start_at 的周(通常是一个月 5 周?)以及每周的总费用来汇总它们。

place_id,第 1 周,第 2 周,...

但我不确定该怎么做?

最佳答案

在这里你可以找到how to extract the week number .然后在 CASE 语句中使用周数

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

关于SQL postgres 聚合/数据透视(按周计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com