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

締切り済みの質問

SQLについての質問

SQLについて質問があります。

以下のようなデータがあったとします。

項目1 項目2 項目3 項目4
----------------------------
  1   A   300   1
  2   A   400   1
  3   A   300   0
  4   B   200   1
  5   B   200   1
  6   B   100   0
  7   C   200   0
  8   C   300   0
  9   C   600   1

ここから「項目4 = 1」のレコードを「項目2」で集約し
「項目3」のサマリを求めると

項目2 項目3 
--------------
  A   700  
  B   400  
  C   600  

となりここからさらに「項目3 >= 500」となる、
元のレコードを抽出したいのですが
このような複雑な処理を1度のSQL可能なのでしょうか?
ご存知の方がいらっしゃいましたら、よろしくお願いいたします。

・期待する結果
項目1 項目2 項目3 項目4
----------------------------
  1   A   300   1
  2   A   400   1
  9   C   600   1

投稿日時 - 2008-03-31 18:25:58

QNo.3910713

困ってます

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

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

回答(4)

ANo.4

select * from t1
where item2 in(select item2
from t1
where item4=1
group by item2
having sum(item3)>500)
and item4=1
order by item1

投稿日時 - 2008-04-01 03:10:16

お礼

無事解決いたしました。
ありがとうございました!

投稿日時 - 2008-04-01 10:32:53

ANo.3

select * from テーブル t1
,(select 項目2 from テーブル
 where 項目4 = 1
group by 項目2
having sum(項目3)>= 500) t2

where t1.項目2 = t2.項目2
and t1.項目4=1
order by 1,2,3

適当に書いてみたけど こんな感じ?

投稿日時 - 2008-03-31 18:46:35

お礼

無事解決いたしました。
ありがとうございました!

投稿日時 - 2008-04-01 10:32:36

ANo.2

こんなんでいかがでしょう?

---
select
 テーブル.*
from
 (select
  項目2,
  sum(項目3) as 項目3計
 from
  テーブル
 where
  項目4 = 1
 group by
  項目2
 ) sum_table,
 テーブル
where
 テーブル.項目2 = sum_table.項目2 and
 テーブル.項目4 = 1 and
 sum_table.項目3計 >= 500

投稿日時 - 2008-03-31 18:43:41

お礼

回答ありがとうございます。
実際SQL文を見ると、なるほど!って感じ
ですね!勉強になりました。

投稿日時 - 2008-04-01 10:31:30

ANo.1

having句使って
項目2 
------
  A 
  C 

を取り出して

where 項目2 in(結果 A,Cが取り出せるSQL)
and 項目4 = 1

でよろしいかと。

投稿日時 - 2008-03-31 18:35:02

お礼

回答ありがとうございます。
結果A,Cが取り出せるところまでは
できていたのですが、その後どうするかが
思いつきませんでした。参考にさせていただきます。

投稿日時 - 2008-04-01 10:26:43

あなたにオススメの質問