データベース
次のSQLを実行したとき、結果セットとして正しいものはどれか。テーブル「売上(商品ID, 売上額, 月)」があり、月ごとの売上合計が10000以上の月と、その最大売上額を取得したい。 SELECT 月, MAX(売上額) FROM 売上 GROUP BY 月 HAVING SUM(売上額) >= 10000;
ア.月ごとに全レコードを表示し、その中から売上額が最大のレコードのみ返す
イ.月ごとに集計し、月合計売上が10000以上の月についてその月の最大売上額を返す正解
ウ.全月で売上額の最大値が10000以上のレコードだけ返す
エ.HAVING句でMAX関数を使っていないためエラーになる
解説
SQLの評価順は「FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY」。HAVINGはグループ化後のフィルタ、WHEREは行レベルのフィルタ。グループ集計の番人がHAVING!
なぜ イ が正解か
このSQL: ①GROUP BY 月 → 月ごとのグループを作る。②HAVING SUM(売上額)>=10000 → グループの合計が10000以上のグループだけ残す。③MAX(売上額) → 残ったグループそれぞれで最大売上額を計算。結果: 月合計が10000以上の月の一覧と、各月の最大売上額が返る。HAVINGとSELECTで異なる集計関数を使うことは完全に合法。
出典: AI生成問題(学習用)
← 前の問題
トランザクション処理の説明として正しいものはどれか。BEGIN → INSERT(A実行) → SAVEPOINT sp1 → UPDATE(B実行) → ROLLBACK TO sp1 → COMMIT を行った場合の結果はどれか。
次の問題 →
次のSQL文において、CASE式とNULL処理の結果として正しいものはどれか。 SELECT CASE WHEN score IS NULL THEN '未受験' WHEN score >= 60 THEN '合格' ELSE '不合格' END AS 判定 FROM 成績 WHERE 受験者ID = 1; 受験者ID=1のscoreがNULLである場合の判定の値はどれか。