ほぼ全ての機能を新サイトへ移行しました

sqlの相関サブクエリ(相関副問い合わせ)の問い合わせ様式について

この質問の投稿一覧へ

なし sqlの相関サブクエリ(相関副問い合わせ)の問い合わせ様式について

msg# 1
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-6-23 13:00 | 最終変更
fujii0401  一人前   投稿数: 23
以下の
ようなテーブルをつくりました



CREATE TABLE Shohin
(shohin_id CHAR(4) NOT NULL,
shohin_mei VARCHAR(100) NOT NULL,
shohin_bunrui VARCHAR(32) NOT NULL,
hanbai_tanka INTEGER ,
shiire_tanka INTEGER ,
torokubi DATE ,
PRIMARY KEY (shohin_id));


インサートは以下のsqlです
BEGIN TRANSACTION;
INSERT INTO Shohin VALUES ('0001', 'Tシャツ', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Shohin VALUES ('0002', '穴あけパンチ', '事務用品', 500, 320, '2009-09-11');
INSERT INTO Shohin VALUES ('0003', 'カッターシャツ', '衣服', 4000, 2800, NULL);
INSERT INTO Shohin VALUES ('0004', '包丁', 'キッチン用品', 3000, 2800, '2009-09-20');
INSERT INTO Shohin VALUES ('0005', '圧力鍋', 'キッチン用品', 6800, 5000, '2009-01-15');
INSERT INTO Shohin VALUES ('0006', 'フォーク', 'キッチン用品', 500, NULL, '2009-09-20');
INSERT INTO Shohin VALUES ('0007', 'おろしがね', 'キッチン用品', 880, 790, '2008-04-28');
INSERT INTO Shohin VALUES ('0008', 'ボールペン', '事務用品', 100, NULL, '2009-11-11');
COMMIT;




そこで以下のような
問い合わせをしました


select shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,
(select avg(hanbai_tanka)
from shohin sub2
where sub1.shohin_id = sub2.shohin_id
group by shohin_bunrui)
from shohin sub1


すると商品単価と相関サブクエリによって呼び出された値が同じでした
私がネットで調べたところ相関サブクエリや相関副問い合わせというのは副問合わせの中に主問い合わせのデータベースを指定することで主問い合わせのデータベースのデータを一行づつ副問い合わせに投げていくという処理であると書いてあったので上記の副問い合わせであれば商品idを調べその副問い合わせの中で得られた分類ごとの販売単価の平均をもってきているのでいいと思ったんですけど

正しくは

select shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,
(select avg(hanbai_tanka)
from shohin sub2
where sub1.shohin_bunrui = sub2.shohin_bunrui
group by shohin_bunrui)
from shohin sub1


みたいです
これだと

group byを外した
以下の問い合わせと結果が同じになるのですが


select shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,
(select avg(hanbai_tanka)
from shohin sub2
where sub1.shohin_bunrui = sub2.shohin_bunrui
)
from shohin sub1


私の相関サブクエリに対する処理の認識が間違っているのでしょうか
正しい処理のプロセスを教えてください




失礼します
さらに追加で

select shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,
(select avg(hanbai_tanka)
from shohin sub2
group by sub1.shohin_mei = sub2.shohin_mei
)

from shohin sub1


は副問い合わせが複数行返しているとエラーがでましたが
データベースの中に同じ商品名のデータはないのにエラーが発生する理由がわかりません

投稿ツリー

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.
ログイン
ユーザ名 or E-Mailアドレス:

パスワード:







プレミアムコンテンツ

受験チケット(割引)

Contact

LPI-Japan Logo

LPI Logo