SQL 按步骤分组
SQL group by steps
我在 SAS 中使用 SQL。
我正在用 GROUP BY 子句对连续变量(离散)进行 SQL 查询,我希望它聚合更多。我不确定这是否清楚,所以这里有一个例子。
这是我的查询:
SELECT CEIL(travel_time) AS time_in_mn, MEAN(foo) AS mean_foo
FROM my_table
GROUP BY CEIL(travel_time)
这将为我提供 travel_time
的每个不同值的 foo
的平均值。由于 CEIL()
函数,它将按分钟而不是秒进行分组(travel_time
可以采用 14.7
(分钟)等值。但是我希望能够以 5 分钟为一组进行分组,例如,这样我就有了类似的东西:
time_in_mn mean_foo
5 4.5
10 3.1
15 17.6
20 12
(当然,mean(foo)
应该在整个区间完成,所以对于time_in_mn = 5
,mean_foo
应该是mean of foo where travel_time in (0,1,2,3,4,5)
)
我怎样才能做到这一点?
(抱歉,如果答案很容易找到,我唯一能想到的搜索词是 group by step
,这让我对 SQL 有了很多 "step by step tutorials"... )
"ceiling to steps"(或舍入,或取整,就此而言)的一个常见习语是除以步长、ceil(当然,或取整,或取整),然后再乘以它。这样,如果我们取例如 12.4:
- 除法:12.4 / 5 = 2.48
- 上限:2.48 变为 3
- 乘法:3 * 5 = 15
并且在 SQL 形式中:
SELECT 5 * CEIL(travel_time / 5.0) AS time_in_mn,
MEAN(foo) AS mean_foo
FROM my_table
GROUP BY 5 * CEIL(travel_time / 5.0)
我在 SAS 中使用 SQL。
我正在用 GROUP BY 子句对连续变量(离散)进行 SQL 查询,我希望它聚合更多。我不确定这是否清楚,所以这里有一个例子。
这是我的查询:
SELECT CEIL(travel_time) AS time_in_mn, MEAN(foo) AS mean_foo
FROM my_table
GROUP BY CEIL(travel_time)
这将为我提供 travel_time
的每个不同值的 foo
的平均值。由于 CEIL()
函数,它将按分钟而不是秒进行分组(travel_time
可以采用 14.7
(分钟)等值。但是我希望能够以 5 分钟为一组进行分组,例如,这样我就有了类似的东西:
time_in_mn mean_foo
5 4.5
10 3.1
15 17.6
20 12
(当然,mean(foo)
应该在整个区间完成,所以对于time_in_mn = 5
,mean_foo
应该是mean of foo where travel_time in (0,1,2,3,4,5)
)
我怎样才能做到这一点?
(抱歉,如果答案很容易找到,我唯一能想到的搜索词是 group by step
,这让我对 SQL 有了很多 "step by step tutorials"... )
"ceiling to steps"(或舍入,或取整,就此而言)的一个常见习语是除以步长、ceil(当然,或取整,或取整),然后再乘以它。这样,如果我们取例如 12.4:
- 除法:12.4 / 5 = 2.48
- 上限:2.48 变为 3
- 乘法:3 * 5 = 15
并且在 SQL 形式中:
SELECT 5 * CEIL(travel_time / 5.0) AS time_in_mn,
MEAN(foo) AS mean_foo
FROM my_table
GROUP BY 5 * CEIL(travel_time / 5.0)