第8号 通勤列車で勉強する,初級シスアド午後 2000/10/09 

末広ページへ このコーナの目次

Ver 0.00


販売管理

すー:今回は,販売管理の問題ですね。

ジャン:販売管理の最大の目的は,私は,請求書の発行だと見ています。

すー:なぜなんですか?

ジャン:販売管理するところというのは,小売りでなくて,卸売りなんです。小売りは,レジで精算したら終わりというか,お金の回収ができます。卸売りというのは,だいたい月末(もしくは特定の締め日)に顧客の企業に請求します。この請求の流れを管理して,最後の請求書をきちんと出すのが,一番大切と思います。

すー:あとは,付録ですか。

ジャン:もちろん,注文のあった商品をきちんと納品することも大切ですけど。これは,メモでもなんとかなります。

すー:今回の問題は,請求書とは関係ないみたいですね。

ジャン:営業会議用の資料作成ですね。

すー:どんな会議なんですか?

ジャン:ここでいう営業というのは,食料品を扱う問屋なら,スーパーの本部や,レストランチェーン店の本部などを回る営業です。紙製品の問屋さんなら,印刷屋さんなどを回る営業となります。機械の部品などを扱う問屋さんなら,工場を回る営業ですね。

すー:ここでいう顧客コードとの顧客というのは,人でなくて,企業ですね。

ジャン:そうです。人であっても悪いわけではないですが,まず,そういうことはないでしょう。

すー:何を扱っていることにしましょうか?

ジャン:たいていの人が分かるように,コンビニにカップヌードルやジュースなどを納品する問屋と思って解いてみいましょう。コンビニの各店では,注文する数量をまず,コンビニチェーンの本部に伝えます。そこから,各問屋に注文が流れて,問屋から,各店に配送されます。仕入値などは,コンビニの本部が問屋と決めています。こんな感じです。

すー:はい。

ジャン:では,線を引いてください。


問題 初級システムアドミニストレータ午後平成年11秋問7

問7 販売管理データベースに関する記述を読んで,設問1〜4に答えよ。

 X 社の営業会議において,取扱い商品の見直しや単価改定などを行うことが決まり,上司の指示に基づき,Y 君は,次回開催される営業会議で必要な資料を,販売管理データベースを活用して作成することになった。

 X 社の販売管理システムに収容されているデータは,販売管理データベースとしてデータベース化(図 1にデータ構造を示す)されている。

 

 商品在庫表の販売終了日には,その商品の販売をやめた日付けが設定されているが,販売中の商品については,NULL 値が設定されている。

 また,商品分類には,類似している商品をひとくくりに把握するためのコードが設定されている。

 Y 君は,次の作業を行うよう,上司から指示を受けた。

作業1:

 1999 年 4 月以降販売を開始し,継続して販売している商品については,商品ごとに販売金額,販売数量,利益率を求める。
 利益率を求める計算式は,“利益率 = 利益金額 / 販売金額”とする。

作業2:

 1998 年 10 月以前に販売を開始し,継続して販売している商品については,1998 年 10 月 〜 1999 年 9 月の 1 年間の商品ごとの販売金額合計を基に,商品ごとにランク付けを行う。
 ランク付けは,販売金額の合計が多い商品から少ない順に並べ,販売金額合計の累計構成比が,70% 未満の商品はランク A,70%以上90% 未満の商品はランク B,90% 以上の商品はランク C とする。

作業3:

 1997 年 10 月以前に販売を開始し,継続して販売している商品については,商品分類ごとにランク付けを行い,その推移状況を求める。

  手順は次のとおりである。

(1) 1997年10月 〜 1998 年 9 月 〜 1998 年 10 月 〜 1999 年 9 月に分けて,それぞれ商品分類ごとの販売金額合計を基に,商品分類ごとにランク付けを行う。ランク付けは,作業2 と同様にする。

(2) 1997 年 10 月 〜 1998 年 9 月のランク付けした結果と 1998 年 10 月 〜1999 年 9 月のランク付けした結果を基に,図2 で示すランク推移表を作る。

(3) ランク推移表を基に,検討資料を作成するためのデータを抽出する。

 なお,ランク推移表の販売金額合計 1 とランク 1 には,1997 年 10 月 〜 1998年 9 月の販売金額合計とランクを設定し,販売金額合計 2 とランク 2 には, 1998 年 10月 〜 1999 年 9 月の販売金額合計とランクを設定する。

 また,ランク推移状況には,状況ステータスとして,ランクが上がったものに‘↑’,ランクが変わらないものに‘→’,ランクが下がったものに‘↓’を設定する。

設問2 作業 2 を行う上で全商品をランク付けの対象にするためには,販売実績がない商品があった場合のことを考慮しておく必要がある。Y 君は,あらかじめ,販売実績がない商品を抽出する SQL 文を考えておくことにした。

 次に示す SQL 文は,販売実績がない商品を抽出するためのものである。

 SQL 文の[   ]に入れる適切な字句を,解答群の中から選べ。

 SELECT 商品コード, 商品名,0 AS 販売金額 FROM 商品在庫表
 WHERE [ d ] AND 販売終了日 IS NULL
 AND 商品コード[ e ](SELECT DISTINCT 商品コード
      FROM 販売表, 販売明細表
   WHERE 販売表.販売番号=販売明細表.販売番号 AND [ f ])

d, f に関する解答群

 ア 販売開始日 BETWEEN‘1998-10-01' AND‘1999-09-30'
 イ 販売開始日 < '1998-10-01'
 ウ 販売開始日 < ‘1999-09-30'
 エ 販売開始日 > ‘1998-10-01'
 オ 販売開始日 > ‘1999-09-30'
 カ 販売日 BETWEEN ‘1998-10-01' AND ‘1999-09-30'
 キ 販売日 < ‘1998-10-01'
 ク 販売日 < ‘1999-09-30'
 ケ 販売日 > ‘1998-10-01'
 コ 販売日 > ‘1999-09-30'

e に関する解答群
 ア IN
 イ NOT IN

設問3 作業 3−(2)のランク推移表を作成する作業として,ランク推移状況に状況ステータスを設定する。

  次に示す SQL 文は, ランク推移表のランク推移状況に状況ステータスを設定するためのものである表は, SQL文中の下線の状況ステータスと条件式の一覧である。

 表中の[   ]に入れる適切な字句を,解答群の中から選ベ。

  UPDATE ランク推移表 SET ランク推移状況 = 状況ステータス WHERE 条件式

 

g に関する解答群
 ア ランク1 = 'C' AND ランク2 = 'A'
 イ ランク1 = 'C' AND ランク2 = 'B'
 ウ ランク1 = 'C' AND ランク2 = 'C'
 エ ランク1 = 'C' AND ランク2 <> 'A'
 オ ランク1 = 'C' AND ランク2 <> 'B'
 カ ランク1 = 'C' AND ランク2 <> 'C'

h, i に関する解答群
 ア ランク1 = 'B' AND ランク2 = 'A'
 イ ランク1 = 'B' AND ランク2 = 'B'
 ウ ランク1 = 'B' AND ランク2 = 'C'
 エ ランク1 = 'B' AND ランク2 <> 'A'
 オ ランク1 = 'B' AND ランク2 <> 'B'
 カ ランク1 = 'B' AND ランク2 <> 'C'

j に関する解答群
 ア ランク1 = 'A' AND ランク2 = 'A'
 イ ランク1 = 'A' AND ランク2 = 'B'
 ウ ランク1 = 'A' AND ランク2 = 'C'
 エ ランク1 = 'A' AND ランク2 <> 'A'
 オ ランク1 = 'A' AND ランク2 <> 'B'
 カ ランク1 = 'A' AND ランク2 <> 'C'

設問4 次に示す SQL 文は,作業 3-(3)の作業として,ランク別商品分類一覧表を作成するためのデータを抽出するものである。

 SQL 文を読んで,抽出結果の順序に関する記述の[   ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。

 なお,ランク推移状況に入力した状況ステータスを昇順に整列させると,‘↑’,‘→’,‘↓’の順となる。

 SELECT ランク2.商品分類,ランク推移状況,ランク1,販売金額合計2
 FROM ランク推移表
 ORDER BY ランク2 ASC,ランク推移状況 ASC,ランク1 DESC

抽出結果の順序に関する記述

(1)抽出結果の順序は,1998 年 10 月〜1999 年 9 月のランクが[ k ]〜[ l ]の順となっている。

(2)同一ランクの場合は,ランクが[ m ]商品を先に抽出し,次にランクが表わらない商品,そしてランクが[ n ]商品の順に抽出している。

(3)さらに,ランクが上がった商品について, [ o ]からランクAに上がった商品は,[ p ]からランクAに上がった商品より先に抽出している。

k, l, o, p に関する解答群
 ア ランク A
 イ ランク B
 ウ ランク C

m, n に関する解答群
 ア 上がった
 イ 変わらない
 ウ 下がった


すー:本文は,いい加減にしか読んでません。

ジャン:テストの場合は,それで,設問に入りましょう。

設問1 次に示す SQL 文は,作業 1商品ごとの販売金額販売数量利益率を求めるものである。

SQL 文の[   ]に入れる適切な字句を,解答群の中から選べ。

 SELECT 商品在庫表.商品コード, 商品在庫表.商品名, [ a ], [ b ],
    ( [ a ] - [ b ] * [ c ] ) / [ a ]
 FROM 販売表, 販売明細表, 商品在庫表
 WHERE 販売表.販売番号 = 販売明細表.販売番号
 AND 商品在庫表.販売開始日 >= ‘1999-04-01'
 AND 商品在庫表.販売終了日 IS NULL
 AND 販売明細表.商品コード = 商品在庫表.商品コード
 GROUP BY 商品在庫表.商品コード, 商品在庫表.商品名, 商品在庫表.仕入単価

解答群

 ア SUM(仕入単価)
 イ SUM(在庫数量)
 ウ SUM(販売金額)
 エ SUM(販売数量)
 オ SUM(販売単価)
 カ 仕入単価
 キ 在庫数量
 ク 販売金額
 ケ 販売数量
 コ 販売単価

すー:これって,GROUP BY で,グループ化してます。

ジャン:合計とかとるときに,このように指示をしますね。

すー:あと,最大値とか最小値なども,グループ化を指示しますよね。

ジャン:グループ化した場合,SELECT のところに書けるのは,GROUP BY で上げた項目か,グループに対する指定をするもの,合計とか最大値などです。

すー:これは,販売明細を,商品コードごとに,販売金額,販売数量,利益率を求めているSQL文ですね。

ジャン:すーちゃん,このSQLを分析したのですか?

すー:いや,たぶん,そんな感じかなと思って。

ジャン:商品コードごとの,販売金額,販売数量,利益率ですので,合計を利用して,SUM(販売金額), SUM(販売数量)で,利益率は,式になりますので,(SUM(販売金額) - 仕入単価 * SUM(販売数量))/SUM(販売金額)ですね。

すー:仕入単価は,変化ないのですか。

ジャン:図1をみると,変化が無いという前提ですよ。

すー:簡単でしたね。設問2にいきましょうか。

ジャン:お願いします。

設問2 作業 2 を行う上で全商品をランク付けの対象にするためには,販売実績がない商品があった場合のことを考慮しておく必要がある。Y 君は,あらかじめ,販売実績がない商品を抽出する SQL 文を考えておくことにした。

 次に示す SQL 文は,販売実績がない商品を抽出するためのものである。

 SQL 文の[   ]に入れる適切な字句を,解答群の中から選べ。

 SELECT 商品コード,商品名,0 AS 販売金額 FROM 商品在庫表
 WHERE [ d ] AND 販売終了日 IS NULL
 AND 商品コード[ e ](SELECT DISTINCT 商品コード
   FROM 販売表,販売明細表
   WHERE 販売表.販売番号=販売明細表.販売番号 AND [ f ])

d, f に関する解答群
 ア 販売開始日 BETWEEN‘1998-10-01' AND‘1999-09-30'
 イ 販売開始日 < '1998-10-01'
 ウ 販売開始日 < ‘1999-09-30'
 エ 販売開始日 > ‘1998-10-01'
 オ 販売開始日 > ‘1999-09-30'
 カ 販売日 BETWEEN ‘1998-10-01' AND ‘1999-09-30'
 キ 販売日 < ‘1998-10-01'
 ク 販売日 < ‘1999-09-30'
 ケ 販売日 > ‘1998-10-01'
 コ 販売日 > ‘1999-09-30'

e に関する解答群
 ア IN
 イ NOT IN

すー:「販売実績がない商品」ということですので,e は,NOT IN ですね。後ろで求めた中に商品コードを求めるということでしょう。

ジャン:すーちゃんいい勘してますね。

すー:d, f は,日にちが入るようですね。

ジャン:どれが入ると思う?

すー:先生,分かりませんよ。本文でチェックしなくては。

ジャン:まず,予想してみましょう。私は,たぶん,アとエと思いますよ。

すー:どっちがどっちですか。

ジャン:d がアで,f が,カでしょう。

すー:なんでそう予想できるのですか。

ジャン:まず,営業会議用資料なんで,日付は範囲指定でしょう。

すー:だから,BETWEEN 日付 AND 日付 だろうということですね。じゃ,d がアなんですか。

ジャン:先に解答群にあるじゃないですか。

すー:それだけの理由ですか。

ジャン:いやもう少し,ヒントはあります。d のところは,商品在庫表の項目ですよね。販売日というのは,販売表かもしくは,販売明細表のデータですので,カが,f で,アが,d でしょう。販売開始日というのは,商品在庫表にあってもおかしい項目ではありません。

すー:先生,図1を見ないで考えているのですか。

ジャン:まだ,しっかりとみていません。解いた後に見ます。

すー:先生,販売開始って,意味から考えると,範囲で指定するということは,特別な意味がありますよ。普通なら,販売中かいなかの判断だけではないでしょうか。

ジャン:そうですね。アは,違ってますね。さすが,すーちゃん,賢い。

すー:作業2を見ますね。

作業2:

 1998 年 10 月以前に販売を開始し,継続して販売している商品については,1998 年 10 月 〜 1999 年 9 月の 1 年間の商品ごとの販売金額合計を基に,商品ごとにランク付けを行う。
 ランク付けは,販売金額の合計が多い商品から少ない順に並べ,販売金額合計の累計構成比が,70% 未満の商品はランク A,70%以上90% 未満の商品はランク B,90% 以上の商品はランク C とする。

ジャン:作業2を見れば,一発で分かりましたね。

すー:先生予想するだけ無駄ということはないですか。

ジャン:そんなことはないですよ。予想したからこそ,一発に目に入って来るもんですよ。

すー:解答は,d: イ,f: カですね。

ジャン:次にいきましょうか。

すー:先生,このSEQ の中に,DESTINCT とありますが,少し解説お願いします。

ジャン:すーちゃん,英語の本来の意味?

すー:別々のとか,はっきり区別できるといった形容詞です。

ジャン:SQL では,重複カットですよ。同じ商品コードが登場した場合,いくつも出さずに一つだけにします。

すー:では,設問3に行きますね。


設問3 作業 3−(2)のランク推移表を作成する作業として,ランク推移状況に状況ステータスを設定する。

  次に示す SQL 文は, ランク推移表のランク推移状況に状況ステータスを設定するためのものである表は, SQL文中の下線の状況ステータスと条件式の一覧である。

 表中の[   ]に入れる適切な字句を,解答群の中から選ベ。

  UPDATE ランク推移表 SET ランク推移状況 = 状況ステータス WHERE 条件式

 

g に関する解答群
 ア ランク1 = 'C' AND ランク2 = 'A'
 イ ランク1 = 'C' AND ランク2 = 'B'
 ウ ランク1 = 'C' AND ランク2 = 'C'
 エ ランク1 = 'C' AND ランク2 <> 'A'
 オ ランク1 = 'C' AND ランク2 <> 'B'
 カ ランク1 = 'C' AND ランク2 <> 'C'

h, i に関する解答群
 ア ランク1 = 'B' AND ランク2 = 'A'
 イ ランク1 = 'B' AND ランク2 = 'B'
 ウ ランク1 = 'B' AND ランク2 = 'C'
 エ ランク1 = 'B' AND ランク2 <> 'A'
 オ ランク1 = 'B' AND ランク2 <> 'B'
 カ ランク1 = 'B' AND ランク2 <> 'C'

j に関する解答群
 ア ランク1 = 'A' AND ランク2 = 'A'
 イ ランク1 = 'A' AND ランク2 = 'B'
 ウ ランク1 = 'A' AND ランク2 = 'C'
 エ ランク1 = 'A' AND ランク2 <> 'A'
 オ ランク1 = 'A' AND ランク2 <> 'B'
 カ ランク1 = 'A' AND ランク2 <> 'C'

ジャン:この SQL,UPDATE が使ってありますね。

すー:更新ですか。

ジャン:条件に合致した行のある項目の値を更新ですね。この場合,→などの矢印を入れるということです。

すー:ランクが上がったら,↑,下がったら,↓,変化しないときは,→ですね。

ジャン:ランクは,C < B < A ですので,g には,「ランク1 = 'C' AND ランク2 <> 'C'」ですね。「ランク1 = 'C' AND ランク2 = 'A'」「ランク1 = 'C' AND ランク2 = 'B'」でもいいのですが,空欄が一つなので,「ランク1 = 'C' AND ランク2 <> 'C'」ですね。

すー:ちょっと,技巧派ですね。プログラムの鉄則から言ったら,たまたま,A, B, Cの3つから選択なので,このテクニックが使えますが,4パターンになったら,使えませんよ。

ジャン:4パターンになったら,クラス1 = 'D' AND ランク2 <> 'D' ってやるんですよ。そうすれば,使えますよね。

すー:確かにそうですけど。(;;)

ジャン:h; は?

すー:アの「ランク1 = 'B' AND ランク2 = 'A'」ですね。

ジャン:i も j も同様にできますね。

すー:i は,ウの「ランク1 = 'B' AND ランク2 = 'C'」。j は,エの「ランク1 = 'A' AND ランク2 <> 'A'」ですね。

ジャン:では,設問4に行きましょうか。

すー:はい。

設問4 次に示す SQL 文は,作業 3-(3)の作業として,ランク別商品分類一覧表を作成するためのデータを抽出するものである。

 SQL 文を読んで,抽出結果の順序に関する記述の[   ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。

 なお,ランク推移状況に入力した状況ステータスを昇順に整列させると,‘↑’,‘→’,‘↓’の順となる。

 SELECT ランク2.商品分類,ランク推移状況,ランク1,販売金額合計2
 FROM ランク推移表
 ORDER BY ランク2 ASC,ランク推移状況 ASC,ランク1 DESC

抽出結果の順序に関する記述

(1)抽出結果の順序は,1998 年 10 月〜1999 年 9 月のランクが[ k ]〜[ l ]の順となっている。

(2)同一ランクの場合は,ランクが[ m ]商品を先に抽出し,次にランクが表わらない商品,そしてランクが[ n ]商品の順に抽出している。

(3)さらに,ランクが上がった商品について, [ o ]からランクAに上がった商品は,[ p ]からランクAに上がった商品より先に抽出している。

k, l, o, p に関する解答群
 ア ランク A
 イ ランク B
 ウ ランク C

m, n に関する解答群
 ア 上がった
 イ 変わらない
 ウ 下がった

ジャン:並び替えの問題ですね。「 ORDER BY ランク2 ASC,ランク推移状況 ASC,ランク1 DESC」を見れば,分かりますね。

すー:先ず,ランク2で昇順で並べて,同一グループ内をランク推移状況を昇順,さらにそのグループをランク1で降順ですね。

ジャン:ランク2の中は,具体的には,何が入っていますか?

すー:A, B, C です。

ジャン:昇順に並べるということは,A, B, Cの順ですね。k;ランク A,l:ランク C の順となります。

すー:(2)では,ランク推移状況で昇順です。

ジャン:ランク推移状況の中身は?

すー:↑,→,↓です。

ジャン:これって昇順に並べるとどうなりますか?

すー:知りません。こんなの知っている人いますか。先生,設問4に「なお,ランク推移状況に入力した状況ステータスを昇順に整列させると,‘↑’,‘→’,‘↓’の順となる。」とありました。

ジャン:良かったですね。昇順ですので,m:ア 上がった,n:ウ 下がった ですね。

すー:最後は,ランク1で降順です。o:ウ ランク C,p: ランク B ですね。

ジャン:これは,いわゆるABC分析の話でしたね。

すー:作業1のここのところですね。

 ランク付けは,販売金額の合計が多い商品から少ない順に並べ,販売金額合計の累計構成比が,70% 未満の商品はランク A,70%以上90% 未満の商品はランク B,90% 以上の商品はランク C とする。

ジャン:販売金額で,商品の ABC 分析をしています。このバックある理論は,総販売金額の8割の金額は,2割の商品種別で占められているいうパレートの法則です。パレートの法則の応用として,販売金額の7割を占める商品群をランク A,最後の1割にあたる商品群をランク C としてますね。

すー:パレート図のこの理論の応用ですね。

ジャン:すーちゃんのお小遣いの使い道は?

すー:なにか身近な例のABC分析してみるといいですよね。

ジャン:私の今日の時間でやってみますね。4時半に起床,30分ほどメール等チェック,5時から7時まで宿題メール作成,7時15分まで,朝の準備,移動を開始して,8時30分に学校,17時半から20時まで移動,この中に1時間,モスバーガーでコーヒーを飲みながら読書。夕食30分,すーちゃんと勤マガ作成11時まで,たぶん,11時半までにお風呂等で寝ます。

すー:表にしてますね。

朝のメールチェック 0.5
宿題メール作成 2.5
朝移動 1.25
夕方移動 1.5
読書 1
勤務 9
朝の準備 0.25
夕飯 0.5
就寝準備 0.5
勤マガ作成 2
睡眠 5
合計 24

ジャン:これを降順に並べるのですね。

すー:はい。問題の基準で,ABC分析してみますね。

時間 累計 累計構成比
勤務 9.00 9.00 38% A
睡眠 5.00 14.00  58% A
宿題メール作成 2.50 16.50 69% A
勤マガ作成 2.00 18.50 77% B
夕方移動 1.50 20.00 83% B
朝移動 1.25 21.25 86% B
読書 1.00 22.25 93% C
朝のメールチェック 0.50 22.75 95% C
夕飯 0.50 23.25 97% C
就寝準備 0.50 23.75 99% C
朝の準備 0.25 24.00 100% C

ジャン:こう思うと,勤務時間の占める時間が大きいですね。あと,読書時間は,移動中も1時間ほど読んでましたので,本日の読書時間は2時間でした。

すー:先生,移動時間を朝,夕方合わせて,一つの枠にすると,順が変わりますね。そうなると,このABC分析はまた違ってきますよね。

ジャン:商品の場合は,分け方がはっきりしているのでそういう問題はないですが,分け方は,あんまり厳密に考えなくてもいいですよ。傾向が見れればいいと割り切りましょう。

すー:先生,これを見て,どうですか。

ジャン:勤務時間と移動時間を短縮したいですよね。明日は,大学の非常勤で1日,岐阜大学です。そうすると,勤務時間が,8時間で,移動時間が,朝,夕方合わせて3時間ほどになります。2時間は自宅での仕事(宿題メール,勤マガ)にかけられそうですね。

すー:じゃ,明日も1号はでそうですね。私も夕食ごろまた,おじゃます。

ジャン:よろしくお願いします。

すー:さて,宿題ですが,いよいよ表計算ですね。楽しみです。

ジャン:みなさん,ぜひ,やって下さいね。

宿題:初級システムアドミニストレータ午後平成11年秋問6


(c)斎藤末広, 2000
この資料は2000年10月15日まで,許可した方のみ閲覧可能です。もし,なんらかの手段でこの資料を読まれて,有効であると判断された場合は,ご入金をお願いします。許可無く再利用,公開を禁止します。なお,情報処理技術者試験問題,サンプルプログラムはその限りではありません。

spage@yscon.co.jp
末広ページへ このコーナーの目次へ