gpt4 book ai didi

sql - 检测整数序列中的间隙

转载 作者:行者123 更新时间:2023-11-29 11:40:34 25 4
gpt4 key购买 nike

意图:检测一个数字序列是否包含间隙。无需识别缺失的元素,只需标记(真/假)序列是否包含间隙。

CREATE TABLE foo(x INTEGER);
INSERT INTO foo(x) VALUES (1), (2), (4);

下面是我的(显然功能正常的)检测差距的查询:

WITH cte AS
(SELECT DISTINCT x FROM foo)
SELECT
( (SELECT COUNT(*) FROM cte a
CROSS JOIN cte b
WHERE b.x=a.x-1)
=(SELECT COUNT(*)-1 FROM cte))
OR (NOT EXISTS (SELECT 1 FROM cte))

对于表为空的边缘情况,需要 OR。查询的逻辑基于以下观察:在连续序列中,链接数等于元素数减 1。

任何更惯用或更高效的东西(我应该担心特别长的序列中的 CROSS JOIN 吗?)

最佳答案

试试这个:

SELECT 
CASE WHEN ((MAX(x)-MIN(x)+1 = COUNT(DISTINCT X)) OR
(COUNT(DISTINCT X) = 0) )
THEN 'TRUE'
ELSE 'FALSE'
END
FROM foo

SQLFiddle demo

关于sql - 检测整数序列中的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com