R2 午後I 問3  設問3 (1)

あきたこまつさん  
(No.1)
レコード数の求め方が全く分かりません。
一番下から導くのは分かるのですが、
全然答えたあわないです。
導き方の詳細をどなたかご教示お願い致します。
2022.10.03 21:42
にゃんちゃんさん 
DB シルバーマイスター
(No.2)
イ・ロ・ハのどれから解いてもOKです。

思考プロセスとしては・・・
①完成形のイメージを持つ
  GROUP BYによって集計して、Excelのピボットテーブルみたいになるなあ
②列値の種類を掛け算していけばよさそうだなあと気づく
です。

例えば、以下のような商品購入履歴のテーブルを考えます。
購入日,会員NO,商品番号,個数,金額,性別,血液型
2021/01/01,A1001234,C10032,3,6000,男,A
2021/03/11,A1003333,C10001,1,5000,女,B
2022/10/07,A1009999,C10990,7,3500,男,AB
...

このテーブルから「2021年と2022年の性別・血液型別の購入金額合計」
を求めるSQLを実行すると以下のようになります。

年,性別,血液型,SUM_金額
2021,男,A,30000
2021,男,B,50000
2021,男,O,60000
2021,男,AB,130000
2021,女,A,35000
2021,女,B,70000
2021,女,O,10000
2021,女,AB,6000
2022,男,A,31000
2022,男,B,99000
2022,男,O,15000
2022,男,AB,10000
2022,女,A,77000
2022,女,B,65000
2022,女,O,30000
2022,女,AB,21000

この16行は、年・性別・血液型の列値の種類数を総当たりで掛け算した結果なので
年の列値(2021,2022の2種)
性別の列値(男,女の2種)
血液型の列値(A,B,O,ABの4種)
を掛け算した2×2×4=16行ということになります。

ただし、上記の例で男性かつA型の会員の購買履歴がない場合は
2021,男,A,30000
2022,男,A,31000
は表示されないことになります。
よって、そういうことは考慮しなくていいよというために、問題用紙P.24の表6の見出しには
「最大結果行数」と書いています。

ということで、イ・ロ・ハについては
問題用紙P.20[業務の概要]、P.21表1 から列値を探してきて
掛け算する、ということです。
2022.10.03 22:19
あきたこまつさん  
(No.3)
にゃんちゃんさん
GROUP BYですね、その一言で理解しました。
埋めているものから導こうとしてしまいました。
いつも、的確なアドバイスありがとうございます。
2022.10.03 23:01
logres_Fanさん 
DB ブロンズマイスター
(No.4)
>No2 
そういうことは考慮しなくていいよというために、問題用紙P.24の表6の見出しには「最大結果行数」と書いています。
そういう事なんですね!

>No1
> 一番下から導くのは分かるのですが、
  B6の12,000でしょうか?答えありきになりますが、分析B2や分析B6を使って、導き出すものではなく、それぞれ独立した分析でした。先入観は禁物です。
  私の場合、まず、分析B2用SQL構文を見ながら、●●別のパターン数をメモして、最大結果行数80を捻り出す手順を探りました。分析用SQL文の目的が、WHERE、GROUP BYの順に書かれている事に気付きました。
  次に、グループ別の求め方ですが、にゃんちゃん殿の回答No2を参考にして下さい。樹形図を想像します。例えば、パソコンのフォルダ四半期その1を開いたら、サブフォルダ会員区分その1とその2があったので、会員区分その1を開いてみたら、サブフォルダ会員地域コードその1と・・・があった。同様に、今度は四半期その2を開いたら、・・・、と続くので、掛け算する事になります。
  そして、WHEREが2020年3月と2019年3月のような場合、それぞれで計算します。
  
  
2022.10.03 23:33

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop