問題
- テーブルの1列に格納された一意な数が、歯抜けのない完全な連番を成しているか、それともギャップ(1つ以上連続する欠番)を含むかどうかを調べる。
CREATE TABLE Numbers (seq INTEGER NOT NULL PRIMARY KEY);
(Numbers:自然数テーブル、seq:連番)
chiakiの解答
考え方
- 欠番があるかどうかだけ調べたいなら、数の個数が(最大の数ー最小の数+1)個あれば良い。
- 注1)seq は PRIMARY KEY なので、同じ数字はないという前提の下である。
- 注2)連番と書いてあるので、数が順に並んでいない場合は考えていない。
SQL文
SELECT CASE WHEN count(N2.seq) = (SELECT (max(N1.seq) - min(N1.seq) +1)
FROM Numbers N1)
THEN 'has no missing number'
ELSE 'exist missing number'
END AS Numbers
FROM Numbers N2;
実行結果
seq
-----
2
3
5
7
8
14
20 の場合
numbers
----------------------
exist missing number
seq
-----
2
3
4
5
6
7
8 の場合
numbers
-----------------------
has no missing number
最終更新:2008年06月24日 16:25