HOME»応用情報技術者試験掲示板»平成29年秋期 午後問6
投稿する
いいえ、公式解答例は SUM(t2.単価 * t1.パレット数) です。
t2.パレット数は参照していません。
図4の「FROM 返品 t1」より、t1は"返品"表の別名であることが分かります。
図2より、"返品"表の列は次の5つであることが分かります。
返品番号, 返品日, 販売番号, 販売明細番号, パレット数
以上より、"返品"表には"単価"列が存在しないことが分かります。
よって、t1.単価は存在しない列を指しているためエラーになります。
いいえ、そういう動作にはなりません。
次の5つの表に対して、
----
返品 t1
返品番号, 返品日, 販売番号, 販売明細番号, パレット数
販売明細 t2
販売番号, 販売明細番号, 仕入番号, 仕入明細番号, パレット数, 単価
仕入明細
仕入番号, 仕入明細番号, 品目コード, 産地コード, パレット数, 単価
品目
品目コード, 品目名
産地
産地コード, 産地名
----
次の FROM … JOIN句を実行した結果、
----
FROM 返品 t1
INNER JOIN 販売明細 t2 USING(販売番号, 販売明細番号)
INNER JOIN 仕入明細 USING(仕入番号, 仕入明細番号)
INNER JOIN 品目 USING(品目コード)
INNER JOIN 産地 USING(産地コード)
----
得られる表の列は次のようになります。
----
返品番号, 返品日, 販売番号, 販売明細番号, t1.パレット数, 仕入番号, 仕入明細番号, t2.パレット数, t2.単価, 品目コード, 産地コード, 仕入明細.パレット数, 仕入明細.単価, 品目名, 産地名
----
上記より、t1.パレット数, t2.パレット数, 仕入明細.パレット数 はそれぞれ別の列であることが分かります。
いいえ、なりません。
回答No.8で述べたとおり、
得られる表の中には
t1.パレット数, t2.パレット数, 仕入明細.パレット数 という異なる列が存在するので
t0.パレット数 ではどれを指しているのか明示できません。
得られる表の中には
t2.単価, 仕入明細.単価 という異なる列が存在するので
t0.単価 ではどれを指しているのか明示できません。
平成29年秋期 午後問6 [4324]
田中さん(No.1)
https://www.ap-siken.com/kakomon/29_aki/pm06.html
平成29年秋期 午後問6 設問3についての質問です。
この問題での私の解答は以下の通りでした。
f: s UM(t1.パレット数*t1.単価)
g: i NNER JOIN 仕入明細 u SING (仕入番号,仕入明細番号)
h: 品目コード,産地コード,単価,パレット数
※投稿の際にエラーが出たので先頭を小文字にしています。
正解では、f: のパレット数はt2テーブルを参照しています。
私の解答では、GROUP BY でt1テーブルに単価とパレット数を残しておき、そちらを参照するといったものです。
私はSQLに慣れていないので、この考え方が間違っているのか分かりません。
いずれにしてもあまりスマートな方法ではないように見えますが、この書き方でも筋は通っているのでしょうか。
ご教授いただければ幸いです。
よろしくお願いいたします。
平成29年秋期 午後問6 設問3についての質問です。
この問題での私の解答は以下の通りでした。
f: s UM(t1.パレット数*t1.単価)
g: i NNER JOIN 仕入明細 u SING (仕入番号,仕入明細番号)
h: 品目コード,産地コード,単価,パレット数
※投稿の際にエラーが出たので先頭を小文字にしています。
正解では、f: のパレット数はt2テーブルを参照しています。
私の解答では、GROUP BY でt1テーブルに単価とパレット数を残しておき、そちらを参照するといったものです。
私はSQLに慣れていないので、この考え方が間違っているのか分かりません。
いずれにしてもあまりスマートな方法ではないように見えますが、この書き方でも筋は通っているのでしょうか。
ご教授いただければ幸いです。
よろしくお願いいたします。
2023.07.17 23:26
jjon-comさん(No.2)
★AP プラチナマイスター
> 正解では、f: のパレット数はt2テーブルを参照しています。
いいえ、公式解答例は SUM(t2.単価 * t1.パレット数) です。
t2.パレット数は参照していません。
> この問題での私の解答は以下の通りでした。
> f: s UM(t1.パレット数*t1.単価)
図4の「FROM 返品 t1」より、t1は"返品"表の別名であることが分かります。
図2より、"返品"表の列は次の5つであることが分かります。
返品番号, 返品日, 販売番号, 販売明細番号, パレット数
以上より、"返品"表には"単価"列が存在しないことが分かります。
よって、t1.単価は存在しない列を指しているためエラーになります。
2023.07.18 00:42
jjon-comさん(No.3)
★AP プラチナマイスター
(これは質問者に対する回答ではありません)
意外だった点を一つ。
SELECT 品目コード, 品目名, 産地コード, 産地名, (…集約関数は略…)
(…略…)
GROUP BY [ h ]
の h の正解は「品目コード, 品目名, 産地コード, 産地名」
一択だと私は思い込んでいたのですが、
別解として「品目コード, 産地コード」もあると、
6年も前に公式解答例が示されているんですね。
意外だった点を一つ。
SELECT 品目コード, 品目名, 産地コード, 産地名, (…集約関数は略…)
(…略…)
GROUP BY [ h ]
の h の正解は「品目コード, 品目名, 産地コード, 産地名」
一択だと私は思い込んでいたのですが、
別解として「品目コード, 産地コード」もあると、
6年も前に公式解答例が示されているんですね。
2023.07.18 00:51
GinSanaさん(No.4)
★AP プラチナマイスター
この投稿は投稿者により削除されました。(2023.07.18 18:30)
2023.07.18 18:30
GinSanaさん(No.5)
★AP プラチナマイスター
この投稿は投稿者により削除されました。(2023.07.18 18:31)
2023.07.18 18:31
GinSanaさん(No.6)
★AP プラチナマイスター
解説を見ると、ANSI的には許可されていますが、各RDBMSの実装によってはうまくいかない場合があります(例:ORACLE)
別解を覚えるよりはGROUP BYの特性を理解した上での本来の回答がいい気はします
別解を覚えるよりはGROUP BYの特性を理解した上での本来の回答がいい気はします
with 返品 as (
セレクト '01' as 品目コード, 3 as パレット数 フロム dual
)
, 品目 as (
セレクト '01' as 品目コード, 'hoge' as 品目名 フロム dual
)
セレクト 品目コード, 品目名, sum(パレット数) AS パレット数 フロム 返品 インナージョイン 品目 using(品目コード) group by 品目コード, 品目名
これはふつうに通るが、セレクト '01' as 品目コード, 3 as パレット数 フロム dual
)
, 品目 as (
セレクト '01' as 品目コード, 'hoge' as 品目名 フロム dual
)
セレクト 品目コード, 品目名, sum(パレット数) AS パレット数 フロム 返品 インナージョイン 品目 using(品目コード) group by 品目コード, 品目名
with 返品 as (
セレクト '01' as 品目コード, 3 as パレット数 フロム dual
)
, 品目 as (
セレクト '01' as 品目コード, 'hoge' as 品目名 フロム dual
)
セレクト 品目コード, 品目名, sum(パレット数) AS パレット数 フロム 返品 インナージョイン 品目 using(品目コード) group by 品目コード
はセレクト '01' as 品目コード, 3 as パレット数 フロム dual
)
, 品目 as (
セレクト '01' as 品目コード, 'hoge' as 品目名 フロム dual
)
セレクト 品目コード, 品目名, sum(パレット数) AS パレット数 フロム 返品 インナージョイン 品目 using(品目コード) group by 品目コード
ORA-00979: GROUP BYの式ではありません。
が返ってきた。
2023.07.18 18:33
田中さん(No.7)
jjon-comさん, GinSanaさん お返事ありがというございます。
返品t1にインナージョインで仕入れ明細,品目,産地テーブルを結合しているので、仕入れ明細に含まれる"単価"と"パレット数"もt1の属性として追加されていると考え、この解答に至った次第です。
そして、 h: のGROUP BY で品目コード,産地コード,単価,パレット数を指定することにより、SELECT文で S U M(t1.パレット数*t1.単価)とすることが出来ると考えました。
まだ勉強中の身なので、各RDBMSで動作の違いについての理解はありませんが、解説通りに覚える方が無難なようですね。
また、私の解答について、誤って理解している箇所があればご指摘いただけると助かります。今後の勉強になります。
よろしくお願いいたします。
返品t1にインナージョインで仕入れ明細,品目,産地テーブルを結合しているので、仕入れ明細に含まれる"単価"と"パレット数"もt1の属性として追加されていると考え、この解答に至った次第です。
そして、 h: のGROUP BY で品目コード,産地コード,単価,パレット数を指定することにより、SELECT文で S U M(t1.パレット数*t1.単価)とすることが出来ると考えました。
まだ勉強中の身なので、各RDBMSで動作の違いについての理解はありませんが、解説通りに覚える方が無難なようですね。
また、私の解答について、誤って理解している箇所があればご指摘いただけると助かります。今後の勉強になります。
よろしくお願いいたします。
2023.07.18 22:37
jjon-comさん(No.8)
★AP プラチナマイスター
> 仕入れ明細に含まれる"単価"と"パレット数"もt1の属性として追加されていると考え
いいえ、そういう動作にはなりません。
次の5つの表に対して、
----
返品 t1
返品番号, 返品日, 販売番号, 販売明細番号, パレット数
販売明細 t2
販売番号, 販売明細番号, 仕入番号, 仕入明細番号, パレット数, 単価
仕入明細
仕入番号, 仕入明細番号, 品目コード, 産地コード, パレット数, 単価
品目
品目コード, 品目名
産地
産地コード, 産地名
----
次の FROM … JOIN句を実行した結果、
----
FROM 返品 t1
INNER JOIN 販売明細 t2 USING(販売番号, 販売明細番号)
INNER JOIN 仕入明細 USING(仕入番号, 仕入明細番号)
INNER JOIN 品目 USING(品目コード)
INNER JOIN 産地 USING(産地コード)
----
得られる表の列は次のようになります。
----
返品番号, 返品日, 販売番号, 販売明細番号, t1.パレット数, 仕入番号, 仕入明細番号, t2.パレット数, t2.単価, 品目コード, 産地コード, 仕入明細.パレット数, 仕入明細.単価, 品目名, 産地名
----
上記より、t1.パレット数, t2.パレット数, 仕入明細.パレット数 はそれぞれ別の列であることが分かります。
2023.07.19 00:13
田中さん(No.9)
jjon-comさん、ありがとうござます。
ようやく自分が勘違いしていた部分を理解できました。
FROM 返品 t1
INNER JOIN 販売明細 t2 USING(販売番号, 販売明細番号)
INNER JOIN 仕入明細 USING(仕入番号, 仕入明細番号)
INNER JOIN 品目 USING(品目コード)
INNER JOIN 産地 USING(産地コード)
この文により結合された表をt1だと考えていたところがおかしかったようです。
t1はt1のままなのですね。
ここからは問とは別の話になりますが、もし結合後の表を "t0" としたとき、
S U M(t0.パレット数*t0.単価)
とすると、正解と同じ答えになるのでしょうか。
ようやく自分が勘違いしていた部分を理解できました。
FROM 返品 t1
INNER JOIN 販売明細 t2 USING(販売番号, 販売明細番号)
INNER JOIN 仕入明細 USING(仕入番号, 仕入明細番号)
INNER JOIN 品目 USING(品目コード)
INNER JOIN 産地 USING(産地コード)
この文により結合された表をt1だと考えていたところがおかしかったようです。
t1はt1のままなのですね。
ここからは問とは別の話になりますが、もし結合後の表を "t0" としたとき、
S U M(t0.パレット数*t0.単価)
とすると、正解と同じ答えになるのでしょうか。
2023.07.19 19:38
jjon-comさん(No.10)
★AP プラチナマイスター
> もし結合後の表を "t0" としたとき、
> S U M(t0.パレット数*t0.単価)
> とすると、正解と同じ答えになるのでしょうか。
いいえ、なりません。
回答No.8で述べたとおり、
得られる表の中には
t1.パレット数, t2.パレット数, 仕入明細.パレット数 という異なる列が存在するので
t0.パレット数 ではどれを指しているのか明示できません。
得られる表の中には
t2.単価, 仕入明細.単価 という異なる列が存在するので
t0.単価 ではどれを指しているのか明示できません。
2023.07.19 23:59