アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/01 10:32

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

適当に書いてみたけど こんな感じ?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/01 10:32

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



---
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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/01 10:31

having句使って


項目2 
------
  A 
  C 

を取り出して

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

でよろしいかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/01 10:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!