問題

問33 SQLの構文として,正しいものはどれか。

ア SELECT 注文日, AVG(数量)
    FROM 注文明細
イ SELECT 注文日, AVG(数量)
    FROM 注文明細
    GROUP BY 注文日
ウ SELECT 注文日, AVG(SUM(数量))
    FROM 注文明細
    GROUP BY 注文日
エ SELECT 注文日
    FROM 注文明細
    WHERE SUM(数量) > 1000
    GROUP BY 注文日

テクノロジ系>技術要素>データベース>データ操作

解説と解答

 それぞれの選択肢にあるSQL文を検証してみましょう。

 選択肢アのSQL文は、集合関数とともに注文日が指定されているのにGROUP BY句がありません。そのため誤りです。選択肢イのようにGROUP BY句を指定するか、「SELECT AVG(数量) FROM 注文明細」としなければいけません。

 選択肢イのSQL文は、正しいSQL文です。注文明細表から注文日ごとの数量の平均を問い合わせしています。

 選択肢ウのSQL文のように、集合関数の中に集合関数を使うことはできません。

 選択肢エのSQL文のように、集合関数をWHERE句で使うことはできません。条件式を書くとすれば、HAVING句になります。

 以上より正解は,選択肢イです。

城田 比佐子、関谷 昌太
アイティ・アシスト インストラクタ
ITに関するコンサルティングや教育を実施するアイティ・アシストのインストラクタ。新入社員研修やプロマネ育成研修をはじめ、基本情報技術者試験、応用情報技術者試験、プロジェクトマネージャ試験などの試験対策研修の実績も豊富。著書に「3週間完全マスター 基本情報技術者 2010年版」などがある。