sqlの相関サブクエリ(相関副問い合わせ)の問い合わせ様式について
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
は副問い合わせが複数行返しているとエラーがでましたが
データベースの中に同じ商品名のデータはないのにエラーが発生する理由がわかりません
ようなテーブルをつくりました
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
は副問い合わせが複数行返しているとエラーがでましたが
データベースの中に同じ商品名のデータはないのにエラーが発生する理由がわかりません
投稿ツリー
-
sqlの相関サブクエリ(相関副問い合わせ)の問い合わせ様式について
(fujii0401, 2019-6-23 13:00)
- Re: sqlの相関サブクエリ(相関副問い合わせ)の問い合わせ様式について (arashi1977, 2019-6-24 9:21)