• 締切済み

複数条件に当てはまる行の抽出をするSQL文の書き方

SQL文の書き方について教えてください。 商品  横   縦 A    1   3 A    1   4 A    2   5 A    3   5 B    1   3 B    1   4 B    1   5 上記表から、商品毎に、縦が最大(第1優先)で、横が最小の行をとってくるというSQLを書いて、以下のように取り出されるようにしたいと考えています。 商品  横   縦 A    2   5 B    1   5 SQL初心者でうまく書けませんでした。 どうかご指導お願いします。

みんなの回答

回答No.7

ANo.6に結合条件が抜けていましたので補足します。 select b.商品, min(a.横), b.縦 from table a, (select 商品, max(縦) 縦 from table group by 商品) b where a.商品 = b.商品 and a.縦 = b.縦 group by b.商品, b.縦 これならうまくいくはずです。

回答No.6

select b.商品, min(a.横), b.縦 from table a, (select 商品, max(縦) 縦 from table group by 商品) b group by b.商品, b.縦 こんな感じならいかがでしょうか?

回答No.5

分析関数の使えるオラクルをお使いなら・・ select 商品,横,縦 from ( select x.*,row_numnber() over(partition by 商品 order by 縦 desc,横) R from hoge x ) where R=1 で良いかと思います。 分析関数が使えないのであれば、 select distinct * from hoge x where not exists ( select 1 from hoge y where x.商品=y.商品 and (x.縦>y.縦 or (x.縦=y.縦 and x.横<y.横)) ) な感じで良いかと思います。(未検証ですが)

回答No.4

【方法1】 select 商品,min(横) as 横,縦 from tbl1 where (商品,縦) in(select 商品,max(縦) from tbl1 group by 商品) group by 商品,縦; 【方法2】 select 商品,min(横) as 横,min(縦) as 縦 from tbl1 where (商品,縦) in(select 商品,max(縦) from tbl1 group by 商品) group by 商品; ※min(縦)はmax(縦)でも結果は同じです。

回答No.3

こんな感じでしょうか? select a.商品,min(b.横),a.max縦 from (select 商品,max(縦) as max縦 from test group by 商品) a inner join test b on (a.商品=b.商品 and a.max縦=b.縦) group by a.商品,a.max縦 これでいけると思うのですが、どうでしょうか?

  • dober-o
  • ベストアンサー率59% (260/439)
回答No.2

いくつか書き方はあると思いますが とりあえずこんな感じでどうでしょう SELECT 商品, Min(横), 縦 FROM テーブル WHERE 縦 = (SELECT MAX(縦) FROM テーブル) GROUP BY 商品, 縦; 詳細は「サブクエリ」あたりを検索してみてください

dubro_unico
質問者

補足

WHERE 縦 = (SELECT MAX(縦) FROM テーブル) のように書いてしまうと、テーブルの最大値をとって きてしまうと思います。 商品ごとに最大値が違う場合は成り立たないですよね?

  • investyou
  • ベストアンサー率23% (13/56)
回答No.1

select 商品, min(横), max(縦) from tbl group by 商品

dubro_unico
質問者

補足

これだと以下のようになると思います。 商品  横   縦 A    1   5 B    1   5

関連するQ&A