データベースの基礎

売上表(店舗, 金額)に、(A, 500)、(A, 700)、(B, 300)、(B, 400)、(C, 1200)、(D, 200)、(D, 900) の7行がある。SELECT 店舗, SUM(金額) FROM 売上 GROUP BY 店舗 HAVING SUM(金額) >= 1000 の結果は何行になるか。

  1. A1行
  2. B3行
  3. C4行
答えと解説を見る

正解:B. 3行

GROUP BY 店舗 で店舗ごとにまとめると、合計はAが 500 + 700 = 1200、Bが 300 + 400 = 700、Cが1200、Dが 200 + 900 = 1100 の4グループになります。HAVING SUM(金額) >= 1000 で合計が1000以上のグループだけを残すので、A、C、Dの3行が結果になります。1行は、WHERE 金額 >= 1000 のように、グループにまとめる前の1行ずつの金額で選んだ場合の結果(Cだけ)です。4行は、HAVINGを付けないときのグループの数です。

  • A. 1行ずつの金額が1000以上の行だけを選んだ場合(WHEREで絞った場合)の結果です。
  • B. 正しい。合計が1000以上になるA(1200)、C(1200)、D(1100)の3行です。
  • C. HAVINGで絞る前のグループの数です。合計が700のBは除かれます。
この分野を解く 分野ページへ

関連する計算ツール

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データベースの基礎のほかの問題

  1. 社員表(氏名, 部署, 給与)に8行あり、部署ごとの給与は、営業が320、280、350、開発が400、310、総務が260、300、企画が330である。SELECT 部署, COUNT(*) FROM 社員 WHERE 給与 >= 300 GROUP BY 部署 HAVING COUNT(*) >= 2 の結果は何行になるか。
  2. 社員表(社員番号, 氏名, 部署ID)に4行あり、部署IDは順に10、20、10、NULLである。部署表(部署ID, 部署名)には部署IDが10、20、30の3行がある。SELECT 社員.氏名, 部署.部署名 FROM 社員 INNER JOIN 部署 ON 社員.部署ID = 部署.部署ID の結果は何行になるか。
  3. 社員表(社員番号, 氏名, 部署ID)に5行あり、部署IDは順に10、20、10、NULL、NULLである。部署表(部署ID, 部署名)には部署IDが10、20、30の3行がある。SELECT 部署.部署名, 社員.氏名 FROM 部署 LEFT OUTER JOIN 社員 ON 部署.部署ID = 社員.部署ID の結果は何行になるか。
  4. 表Rの列xの値は 1、1、2、3 の4行、表Sの列xの値は 1、1、2、4 の4行である。SELECT * FROM R INNER JOIN S ON R.x = S.x の結果は何行になるか。
  5. 顧客表(顧客ID, 氏名)には (C1, 青木)、(C2, 井上)、(C3, 上田)、(C4, 江藤) の4行がある。注文表(注文ID, 顧客ID, 金額)には (O1, C1, 3000)、(O2, C2, 8000)、(O3, C1, 6000)、(O4, C3, 2000)、(O5, C2, 9000) の5行がある。SELECT 氏名 FROM 顧客 WHERE 顧客ID IN (SELECT 顧客ID FROM 注文 WHERE 金額 > 5000) の結果は何行になるか。