IDの桁数が不足している場合はゼロ埋めする場合
この場合は、IDが何桁であるのかを把握する必要があります。
LEFT(lpad(cast(ID as text), 6, '0'), 4)
の 6
がIDの桁数です。
LEFT(lpad(cast(ID as text), 6, '0'), 4)
の 4
は前方?桁でグループ化。の数値です。
SQL
1SELECT KEY, count(*)
2from
3 (
4 SELECT LEFT(lpad(cast(ID as text), 6, '0'), 4) as KEY, ID
5 from test
6 ) data
7GROUP BY KEY;
IDの桁数が不足している場合でも先頭4桁で扱う場合
SQL
1SELECT KEY, count(*)
2from
3 (
4 SELECT LEFT(cast(ID as text), 4) as KEY, ID
5 from test
6 ) data
7GROUP BY KEY;
上記2つの違い
88881 のような桁数が異なるIDがある場合・・・
前者(ゼロ埋めアリ)では、0888
としてカウントされます。
後者(ゼロ埋めなし)では、8888
としてカウントされます。
後者の場合は、888801
(6桁) 88881
(5桁) が同一視されることに注意が必要です。
ゼロ埋めを行わないので、どちらも先頭4桁は 8888
になってしまうので。前者ではこういうことは起こりません。
IDの桁数が必ず6桁と決まっている場合は後者のゼロ埋めなしの方が単純で良いでしょう。
DDL
SQL:DDL
1CREATE TABLE test(
2
3 ID int primary key
4
5);
6INSERT into test values (123456),(123411),(123468),(999112),(999134),(999153),(102499),(102489),(102485);
7
8INSERT into test values (88881),(88882),(88883);