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

締切り済みの質問

複数条件に当てはまる行の抽出をする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初心者でうまく書けませんでした。
どうかご指導お願いします。

投稿日時 - 2006-02-10 18:16:23

QNo.1957052

暇なときに回答ください

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

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

回答(7)

ANo.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.縦

これならうまくいくはずです。

投稿日時 - 2006-02-24 11:57:20

ANo.6

select b.商品, min(a.横), b.縦
from table a,
(select 商品, max(縦) 縦
from table group by 商品) b
group by b.商品, b.縦

こんな感じならいかがでしょうか?

投稿日時 - 2006-02-24 00:05:40

分析関数の使えるオラクルをお使いなら・・

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.横))
)

な感じで良いかと思います。(未検証ですが)

投稿日時 - 2006-02-11 05:37:24

ANo.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(縦)でも結果は同じです。

投稿日時 - 2006-02-11 04:57:00

ANo.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縦

これでいけると思うのですが、どうでしょうか?

投稿日時 - 2006-02-10 18:46:53

ANo.2

いくつか書き方はあると思いますが
とりあえずこんな感じでどうでしょう

SELECT 商品, Min(横), 縦
FROM テーブル
WHERE 縦 = (SELECT MAX(縦) FROM テーブル)
GROUP BY 商品, 縦;

詳細は「サブクエリ」あたりを検索してみてください

投稿日時 - 2006-02-10 18:40:35

補足

WHERE 縦 = (SELECT MAX(縦) FROM テーブル)
のように書いてしまうと、テーブルの最大値をとって
きてしまうと思います。

商品ごとに最大値が違う場合は成り立たないですよね?

投稿日時 - 2006-02-10 20:27:31

ANo.1

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

投稿日時 - 2006-02-10 18:26:42

補足

これだと以下のようになると思います。

商品  横   縦
A    1   5
B    1   5

投稿日時 - 2006-02-10 20:24:43

あなたにオススメの質問