• ベストアンサー

このような場合のSQLの記述

下記の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の列が表示されない。 どうしたらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

> 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; ――とか。試さないで書いてますが。

ikky
質問者

お礼

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

その他の回答 (2)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

osamuyさんと、基本的に同じですが、分かりやすい方を使ってください。 SELECT a,b,c FROM smp WHERE (a,c) IN (SELECT a,MAX(c) FROM smp GROUP BY a);

ikky
質問者

お礼

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

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

関連する重要な2点を挙げて起きます。 ・ SQLで表示するとき、order by 句が無ければ順番は保障されない。   表示結果はたまたまそうなっていると考えるべきです。 ・ アウトプットの例として挙げているデータだけでは不十分です。      たとえば、「XX か 5」というレコードがあったときにどの様に選べばいいのか分かりません。 その基準が重要です。

ikky
質問者

お礼

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

関連するQ&A