首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL按列自定义分组集

SQL按列自定义分组集
EN

Stack Overflow用户
提问于 2016-02-25 08:23:47
回答 1查看 1.1K关注 0票数 0

Vertica中,我们不仅需要按列进行分组,还需要按组内的数据集逐列分组,这样就可以进行自定义分组了吗?

我可能无法正确地提出我的问题,但样本数据和预期的输出将有助于理解我的问题。

示例数据可以使用下面的with创建。

代码语言:javascript
复制
;WITH Sample(DayNo, Amt) AS
(
    SELECT 1,10.0 UNION
    SELECT 2,15.0 UNION
    SELECT 3,9.0 UNION
    SELECT 4,6.0 UNION
    SELECT 5,15.0 UNION
    SELECT 6,5.0 UNION
    SELECT 7,2.0 UNION
    SELECT 8,1.0 UNION
    SELECT 9,8.0 UNION
    SELECT 10,4.0
)
SELECT DayNo, Amt FROM Sample ORDER BY DayNo;

所以只有2列DayNo (基本上是一个没有时间的日期)和Amt (这是DayNo的数量)。

我想要按DayNo分组的Sum,但要固定的天数。如果我想要连续两天的总和(Amt),那么预期的产出是:

代码语言:javascript
复制
DayNo SUM(Amt)
1-2     25
3-4     15
5-6     20
7-8     3
9-10    12

但是,如果我要连续3天的求和(Amt),那么预期的输出是:期望的结果

代码语言:javascript
复制
DayNo SUM(Amt)
1-3     34
4-6     26
7-9     11
10-12   4

请注意,对于相同的DayNo,数据可能有多个行,而不仅仅是1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 08:46:07

可以使用整数除法按以下方式进行分组:

代码语言:javascript
复制
SELECT CONCAT(CAST((((DayNo - 1) / 3) + 1) * 3 - 2 AS CHAR(4)), '-',
              CAST((((DayNo - 1) / 3) + 1) * 3 AS CHAR(4)))
           AS DayNo, 
       SUM(Amt)
FROM Sample 
GROUP BY (DayNo-1) / 3

这将分组第1,2,3天在一组,第4,5,6天,在下一组。等。

Demo here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35621936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档