ある電子商取引サイトでは、会員の属性を柔軟に変更できるように、"会員項目"表で管理することにした。"会員項目"表に対し、次の条件でSQL文を実行して結果を得る場合、SQL文のaに入れる字句はどれか。ここで、実線の下線は主キーを、NULLは値がないことを表す。 〔条件〕(1)同一"会員番号"をもつ複数の行によって、1人の会員の属性を表す。(2)新規に追加する行の行番号は、最後に追加された行の行番号に1を加えた値とする。(3)同一"会員番号"で同一"項目名"の行が複数ある場合、より大きい行番号の項目値を採用する。 会員項目(行番号,会員番号,項目名,項目値): 1,0111,会員名,情報太郎 / 2,0111,最終購入年月日,2021-02-05 / 3,0112,会員名,情報花子 / 4,0112,最終購入年月日,2021-01-30 / 5,0112,最終購入年月日,2021-02-01 / 6,0113,会員名,情報次郎。結果(会員番号,会員名,最終購入年月日): 0111,情報太郎,2021-02-05 / 0112,情報花子,2021-02-01 / 0113,情報次郎,NULL。 〔SQL文〕SELECT 会員番号, [a](CASE WHEN 項目名='会員名' THEN 項目値 END) AS 会員名, [a](CASE WHEN 項目名='最終購入年月日' THEN 項目値 END) AS 最終購入年月日 FROM (SELECT 会員番号,項目名,項目値 FROM 会員項目 WHERE 行番号 IN (SELECT [a](行番号) FROM 会員項目 GROUP BY 会員番号,項目名)) T GROUP BY 会員番号 ORDER BY 会員番号
MAXで最新行を選び、CASE式の集約で行を列に展開する
| 会員項目: | 行番号(主キー) | 会員番号 | 項目名 | 項目値 |
|---|---|---|---|---|
| 1 | 0111 | 会員名 | 情報太郎 | |
| 2 | 0111 | 最終購入年月日 | 2021-02-05 | |
| 3 | 0112 | 会員名 | 情報花子 | |
| 4 | 0112 | 最終購入年月日 | 2021-01-30 | |
| 5 | 0112 | 最終購入年月日 | 2021-02-01 | |
| 6 | 0113 | 会員名 | 情報次郎 |
| 結果: | 会員番号 | 会員名 | 最終購入年月日 |
|---|---|---|---|
| 0111 | 情報太郎 | 2021-02-05 | |
| 0112 | 情報花子 | 2021-02-01 | |
| 0113 | 情報次郎 | NULL |
選択肢
- アCOUNT
- イDISTINCT
- ウMAX
- エMIN
正解と解説
正解:ウ MAX
同一の会員番号・項目名の中で最も大きい行番号の行を採用するので、副問合せでは行番号の最大値を求める必要がある。また外側では、条件に合致しない行がNULLになるCASE式を集約して1行にまとめる(いわゆる行から列への転置)ため、NULLを無視して値を拾える集約関数が必要になる。どちらもMAXで満たせる。
選択肢ごとの解説
- アCOUNTは件数を返すだけで、行番号の最大値の特定にも項目値の取出しにも使えない。
- イDISTINCTは重複を除く指定で集約関数ではなく、最大の行番号を選ぶ働きもない。
- ウ正解。副問合せで最大の行番号を選び、外側でCASE式の結果を集約して列に展開できる。
- エMINでは最も古い行が採用され、条件(3)の「より大きい行番号を採用する」に反する。
同じ分野の他の問題
- "商品"表と"商品別売上実績"表に対して、SQL文を実行して得られる売上平均金額はどれか。 〔SQL文〕 SELECT …2024年度 秋期 午前II 問7
- "成績"表から、クラスごとに得点の高い順に個人を順位付けした結果を求めるSQL文の、aに入れる字句はどれか。 〔SQL文…2023年度 秋期 午前II 問9
- "商品"表と"商品別売上実績"表に対して、SQL文を実行して得られる売上平均金額はどれか。 〔SQL文〕 SELECT …2022年度 秋期 午前II 問7
- 表Rと表Sに対し、SQL文を実行して結果を得るとき、aに入れる字句はどれか。ここで、結果のNULLは値が存在しないことを…2020年度 10月試験 午前II 問7
- ある電子商取引サイトでは、会員の属性を柔軟に変更できるように、“会員項目”表で管理することにした。“会員項目”表に対し、…2019年度 春期 午前II 問14
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。