当前位置: 首页 > 面试题库 >

SQL GROUP BY:间隔是否连续?

束涵涤
2023-03-14
问题内容

想法是说您有下表。

-------------
| oID | Area|
-------------
| 1 | 5     |
| 2 | 2     |
| 3 | 3     |
| 5 | 3     |
| 6 | 4     |
| 7 | 5     |
-------------

如果可以按连续性分组,则此伪查询

SELECT SUM(Area) FROM sample_table GROUP BY CONTINUITY(oID)

会回来

-------------
| SUM(Area) |
-------------
|  10       |
|  12       |
-------------

如果在oID处出现连续性中断,或者缺少oID时,则表示oID 4的条目。

此类功能是否存在于Sql的标准功能中?


问题答案:

“ SQL的标准函数”中没有此类功能,但是可以通过一些技巧来获得所需的结果集。

使用下面说明的子查询,我们创建了一个虚拟字段,您可以GROUP BY在外部查询中使用该字段。每次在序列中存在间隔时,此虚拟字段的值都会增加oID。这样,我们为每个“数据岛”创建一个标识符:

SELECT  SUM(Area), COUNT(*) AS Count_Rows
FROM    (
        /* @group_enumerator is incremented each time there is a gap in oIDs continuity */
        SELECT  @group_enumerator := @group_enumerator + (@prev_oID != oID - 1) AS group_enumerator,
                @prev_oID := oID AS prev_oID,
                sample_table.*
        FROM    (
                SELECT  @group_enumerator := 0,
                        @prev_oID := -1
                ) vars,
                sample_table
        /* correct order is very important */
        ORDER BY
                oID
        ) q
GROUP BY
        group_enumerator

测试表和数据生成:

CREATE TABLE sample_table (oID INT auto_increment, Area INT, PRIMARY KEY(oID));
INSERT INTO sample_table (oID, Area) VALUES (1,5), (2,2), (3,3), (5,3), (6,4), (7,5);

我要感谢Quassnoi在我的相关问题中指出了这一技巧;-)

更新:在示例查询中添加了测试表和数据,并修复了重复的列名。



 类似资料:
  • 问题内容: 我在不同的时间间隔中对某些值进行了分类。多数格式为[20-30],但有些格式为[30-infinite]。 您是否知道可以表示的间隔类: 双方都不封闭的间隔(例如(0-5)或[0-5)) 在无限时关闭(或开始)的时间间隔 问题答案: Time&Money项目似乎具有您需要的Interval类。 请在svn:interval包中查看这些文件。

  • 我们有一个Flink任务,它将两个流连接起来,两个流都使用来自Kafka的事件。下面是示例代码 但是,我们没有看到任何连接输出。我们检查了每个流是否连续发射带有时间戳和适当水印的元素。有人知道可能的原因吗?

  • 问题内容: 我想知道是否存在一种 标准 或“正常”的方式来解释时间间隔数据端点,这些端点涉及定义端点的值的包含性/排他性。但是请注意,我要问的是什么是标准(或最常见的) 公约 (如果有),而不是关于您的个人喜好。如果您真的想提供学位论文,请附上对某人已发布的标准或此问题的标准文本的引用。除非有根本性的缺陷,否则最好使用开放标准(我不必花钱去阅读)。 当然,从A到B的时间间隔有4种可能性: (A,B

  • 让事件反复发生 用法 Your browser does not support the video tag. 案例:坏掉的小台灯 功能:不停闪烁 工作原理 在配置项中可以选择每隔多少秒反转一次 例:制作一个闪烁的灯 例:温度过高时会发出“哔哔”声报警

  • 有数百万个不重叠的连续间隔,如[a,c]、[c,e]、[e,g)……它们以随机顺序发送给我,我想随时查询是否可以用接收到的这些连续间隔的组合来封闭其他给定间隔。 例如,我希望有一个方法来添加一个连续的间隔,一个方法来测试一个任意的间隔是否可以被之前添加的间隔组合所包围。 类似于 想知道什么是适合这种情况的数据结构? 如果有区别,我们可以假设的边界总是与一些s的边界匹配,因此在上面的示例中,不会有一

  • 我有六个变量:,,,,和。我需要检查今天的月份和日期是否在从和直到变量的范围内。 例如,如果,,,,和则日期在间隔内,方法应返回true。 但我不知道该怎么做。除了使用ifs检查所有可能的结果,还有其他选择吗?