【发布时间】:2023-03-24 10:23:01
【问题描述】:
我有这个名为 pdays 的数据:
id|time|date_time| type_id
1 2 2016-03-05 1
2 5 2016-03-05 1
3 3 2016-03-06 2
4 7 2016-03-07 3
5 2 2016-03-10 1
6 1 2016-03-12 3
我想计算按 type_id 分组的工作日和周末的平均时间 SUM(time)
输出期望是这样的:
type_id| weekday_time|weekends_time
1 7 2
2 3 0
3 7 1
这是我的想法:
首先我需要从 date_time 中提取日期编号;二、判断日期数是否属于周末数(5,6,12,13,19,20,26,27)(注:这个数据是一个月的情况,所以不用担心下个月周末日期数字的变化);最后对type_id做聚合和分组
CASE WHEN pday.date IN(5,6,12,13,19,20,26,27) THEN 'weekend' ELSE 'weekday' END
这是我认为我应该使用的案例部分。
【问题讨论】:
-
您的案例陈述会在下个月临近而 5 号和 6 号不在周末时立即崩溃。每个 RDBMS 都有某种形式的 DATEPART 函数,它将返回星期几,您可以从中收集工作日和周末。
-
这只是一个月的情况,所以我不用担心下个月的数字变化
-
您使用的是什么关系型数据库? MySQL、Sql Server 等
-
我正在使用 spark.sql
标签: sql group-by apache-spark-sql case