コマンド道場
DISTINCT難易度 ★★☆☆☆

重複を除いて一覧にする

社員が 1 人以上所属している部署の busho_id を、重複なく、小さい順に取り出してください。列は「busho_id」の 1 列にしてください。所属が決まっていない社員は無視します。

主要 7 製品で通用 そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database / IBM Db2

製品ごとの対応表(実測)を見る

  • DISTINCT は「選んだ列の組み合わせ」が同じ行をまとめます。列を 1 つ足すと結果の行数が変わることに注意してください。
  • NULL どうしは DISTINCT では 1 つにまとめられます。= による比較では NULL 同士が等しくならないのと対照的です。
● 起動中…

この問題で使えるテーブル(名前をタップすると入力できます)

7

NULL
🔑int不可
text不可
int
データを見る(先頭 5 行)
busho_idbusho_nameparent_busho_id
1経営NULL
2開発1
3営業1
4管理1
5基盤2

18

NULL
🔑int不可
text不可
int
int
numeric(10,0)不可
date不可
date
データを見る(先頭 5 行)
shain_idnamebusho_idjoushi_idsalaryhired_ontaishoku_on
1鈴木1NULL9800002014-04-01NULL
2佐藤217200002016-10-01NULL
3田中225200002019-04-01NULL
4中村225300002020-04-01NULL
5小林224450502024-04-01NULL

解説

結論

SELECT DISTINCT で重複を除き、WHERE busho_id IS NOT NULL で NULL を外します。

なぜ

DISTINCT は NULL を「値のひとつ」として扱い、複数の NULL を 1 行にまとめて残します。消えてはくれません。「所属なしを除く」には明示的な条件が必要です。

よくある間違い

DISTINCT を付けただけで NULL も消えると思い込む。この問題では NULL の行が 1 つ余ることで気づけます。

根拠(一次情報)