単二電池

下記のSQLの記述方法について教えてください。


TBL:smp

A  B  C
------------
XX あ 5
YY え 3
ZZ お 2
XX え 1

のテーブルで、Aの列でグループ化し、Cの列の最大の行を出力したい。
アウトプットとしては、

A  B  C
------------
XX あ 5
YY え 3
ZZ お 2


にしたいのですが、A、Bでグループ化すると、上記のアウトプットにはならず、
Aだけでグループ化すると、Bの列が表示されない。
どうしたらいいでしょうか?

A 回答 (3件)

> Aの列でグループ化し、Cの列の最大の行


という事なら、

select T1.* from smp T1,(select A,max(C) MC from smp group by A) T2 where T1.A=T2.A and T1.C=T2.MC;

――とか。試さないで書いてますが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
お教え頂いたSQLで自分が出力したかった結果を得ることができました。
非常に助かりました!

お礼日時:2008/04/20 23:38

osamuyさんと、基本的に同じですが、分かりやすい方を使ってください。


SELECT a,b,c
FROM smp
WHERE (a,c) IN (SELECT a,MAX(c) FROM smp GROUP BY a);
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
お教え頂いたこちらのSQLでも自分が出力したかった結果を得ることができました。
非常に助かりました!なるほどです。

お礼日時:2008/04/20 23:39

関連する重要な2点を挙げて起きます。



・ SQLで表示するとき、order by 句が無ければ順番は保障されない。
  表示結果はたまたまそうなっていると考えるべきです。

・ アウトプットの例として挙げているデータだけでは不十分です。
  
  たとえば、「XX か 5」というレコードがあったときにどの様に選べばいいのか分かりません。
その基準が重要です。
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございます。
おっしゃる通り「XX か 5」の場合の選び方をどうするかと
いう問題がありました。ただ、今回の場合にはデータ的には
Cの値は重複のデータがない、という前提でした。説明不足で
すみませんが、的確なご指摘どうもありがとうございました。

お礼日時:2008/04/20 23:27

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

関連するカテゴリからQ&Aを探す