按组自定义分组的SQL组按列分组

时间:2016-02-25 08:23:48

标签: mysql sql-server group-by grouping vertica

是否可以在 Vertica 中进行自定义分组,我们不仅需要按列进行分组,还需要按列分组进行分组?

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

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

;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的数量)。

我希望Sum(Amt)按DayNo分组但是天数。例如: 如果我想要一组连续2天的Sum(Amt),那么预期的输出是:

DayNo SUM(Amt)
1-2     25
3-4     15
5-6     20
7-8     3
9-10    12

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

DayNo SUM(Amt)
1-3     34
4-6     26
7-9     11
10-12   4

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

1 个答案:

答案 0 :(得分:1)

您可以使用整数除法进行分组:

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