こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

SQL文(副問合せについて)

SELECT URIAGE_NO FROM URIAGE AS U1 WHERE URIAGE_SURYO >
(SELECT AVG(URIAGE_SURYO) FROM URIAGE AS U2 WHERE U1.HINMOKU_CODE = U2.HINMOKU_CODE);


上記SQLの構文で

(SELECT AVG(URIAGE_SURYO) FROM URIAGE AS U2 WHERE U1.HINMOKU_CODE = U2.HINMOKU_CODE

この部分の論理がわかりません。
書籍では「HINMOKU_CODEごとのURIAGE_SURYOの
平均を求める」ということですが、何故このように
なるのかがわかりません。副問合せではGROUP BY句
が使えないので、非常に困っております。

下記にデータを記載致します。
以上、宜しくお願いします。


■主問合せ
URIAGE.NO HINMOKU_CODE URIAGE_SURYO
001 BP001 10
002 BP002 20
003 BP002 30
004 BP002 10
005 BP001 20
006 BP003 30
007 BP004 10
008 BP004 20
009 BP003 20

■副問合せ
HINMOKU_CODE AVG(URIAGE_SURYO)
BP001 10
BP002 20
BP003 25
BP004 15

■結果
URIAGE.NO HINMOKU_CODE
 003 BP002
005 BP001
006 BP003
008 BP004

投稿日時 - 2006-05-05 22:52:19

QNo.2133223

KGM

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

別名(エイリアス)という手法ですね

>・・・ FROM URIAGE AS U1・・・
>・・・ FROM URIAGE AS U2 ・・・

のようにひとつのテーブルを異なる名前で定義し
>U1.HINMOKU_CODE = U2.HINMOKU_CODE
のように比較しています

つまり自分自身のクローンからCODEが対象とするレコードと同じものの平均を求め、
URIAGE_SURYOとの比較に使っているのです

投稿日時 - 2006-05-06 11:50:18

お礼

遅くなりました。
ようやくわかりました。
感謝です^^

投稿日時 - 2006-05-21 10:58:06

ANo.2

>(SELECT AVG(URIAGE_SURYO) FROM URIAGE AS U2 WHERE U1.HINMOKU_CODE = U2.HINMOKU_CODE);

副問い合わせのパラメタに主問い合わせの項目が使用されるので相関副問い合わせといわれるやり方です。
直にWHERE文など書けない場合に副問い合わせ内で記述するようになります。
副問い合わせでHINMOKU_CODEで売上の平均を出してURIAGEの中から平均より多いレコードを抽出するSQL。

ちなみに
■副問合せ
HINMOKU_CODE AVG(URIAGE_SURYO)
BP001 10
のBP001は15では

投稿日時 - 2006-05-06 11:30:27

ANo.1

(SELECT AVG(URIAGE_SURYO) FROM URIAGE AS U2 WHERE U1.HINMOKU_CODE = U2.HINMOKU_CODE)
主問い合わせの品目コード(U1.HINMOKU_CODE)に一致する(副問い合わせでの)品目コードの売上数量の平均を求める
ということだと思いますが・

投稿日時 - 2006-05-06 04:12:04

あなたにオススメの質問