LEFT OUTER JOINとAVG関数による平均金額計算

SQL文の処理順序に従って結果を求めます: 1. 「商品」表から WHERE 句の「商品ランク = 'A'」を満たす行を抽出: ・S001(PPP, A) ・S002(QQQ, A) ・S003(RRR, A) 2. 「商品別売上実績」表と LEFT OUTER JOIN(商品コードで結合): ・S001:売上合計金額 = 50 ・S002:商品別売上実績表に対応行がないため、売上合計金額 = NULL ・S003:売上合計金額 = 250 3. AVG(売上合計金額) の集計: SQLの集合関数 AVG は NULL 値の行を除外して計算します。 したがって、対象となる行は S001 と S003 の2件であり、平均値は: (50 + 250) ÷ 2 = 300 ÷ 2 = 150 よって、売上平均金額は 150 となり、イ が正解です。 ※NULL を 0 とみなして 3 で割った 100(ア)と混同しないよう注意が必要です。 NULL を 0 と誤認して (50 + 0 + 250) ÷ 3 = 100 と計算した誤りです。AVG 関数は NULL の行を母数カウントから除外します。 商品ランク B や C の数値を混同した誤った計算値です。 全体の平均や商品別売上実績の他の行を誤って計算した値です。

“商品” 表と “商品別売上実績” 表に対して, SQL 文を実行して得られる売上平均金額はどれか。

商品

商品コード

品名

商品ランク

S001

PPP

A

S002

QQQ

A

S003

RRR

A

S004

SSS

B

S005

TTT

C

S006

UUU

C

商品別売上実績

商品コード

売上合計金額

S001

50

S003

250

S004

350

S006

450

〔SQL文〕 SELECT AVG(売上合計金額) AS 売上平均金額  FROM 商品 LEFT OUTER JOIN 商品別売上実績   ON 商品.商品コード = 商品別売上実績.商品コード  WHERE 商品ランク = 'A'  GROUP BY 商品ランク

出典2022r04a_db_am2_問7
ア
100
イ
150
ウ
225
エ
275