mysql - SQL group by 按列分组内的自定义分组集

标签 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 行。

最佳答案

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

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

关于mysql - SQL group by 按列分组内的自定义分组集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35621936/

相关文章:

mysql - 在索引到 solr 之前预处理数据

sql-server - 世界上最大的SQL Server数据库安装大小是多少?

python - 使用 apply、transform、agg - Python Pandas 时如何引用 groupby 索引?

sql - MySQL:多分组

c# - SqlConnection 命令在删除时不会引发异常

mysql - 检索每个组中的最后一条记录 - MySQL

mysql - 导入 sql db 后,在本地更新/配置并运行 laravel 项目?

mysql - Mysql load data infile 语句在异常情况下如何表现

php - while循环只执行一次

SQL Server : compare value before insertion