- ベストアンサー
このような場合の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の列が表示されない。 どうしたらいいでしょうか?
- みんなの回答 (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; ――とか。試さないで書いてますが。
その他の回答 (2)
- masa6272
- ベストアンサー率66% (93/140)
osamuyさんと、基本的に同じですが、分かりやすい方を使ってください。 SELECT a,b,c FROM smp WHERE (a,c) IN (SELECT a,MAX(c) FROM smp GROUP BY a);
お礼
ご回答ありがとうございました。 お教え頂いたこちらのSQLでも自分が出力したかった結果を得ることができました。 非常に助かりました!なるほどです。
- auty
- ベストアンサー率58% (284/486)
関連する重要な2点を挙げて起きます。 ・ SQLで表示するとき、order by 句が無ければ順番は保障されない。 表示結果はたまたまそうなっていると考えるべきです。 ・ アウトプットの例として挙げているデータだけでは不十分です。 たとえば、「XX か 5」というレコードがあったときにどの様に選べばいいのか分かりません。 その基準が重要です。
お礼
ご回答どうもありがとうございます。 おっしゃる通り「XX か 5」の場合の選び方をどうするかと いう問題がありました。ただ、今回の場合にはデータ的には Cの値は重複のデータがない、という前提でした。説明不足で すみませんが、的確なご指摘どうもありがとうございました。
お礼
ご回答ありがとうございました。 お教え頂いたSQLで自分が出力したかった結果を得ることができました。 非常に助かりました!