- ベストアンサー
最大値を含むレコードの抽出
お世話になります。 SQLでIN句やサブクエリではなく、HAVING句+MAX関数を使用して最大値を含むレコードを抽出することはできるのでしょうか。 id | name | value --------------- 1 | aaaa | 2000 2 | aaaa | 1000 3 | bbbb | 1000 上の表でいうとnameフィールドでグルーピングしてidの1と3が抽出対象になります。MySQLを使用しておりますが、 標準SQLでお願いしたいです。 よろしくどうぞ。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1と3のid,name,valueを取得するということですよね? 基本的にgroup byするときにselectできる項目はgroup by にある項目か集計関数を使った値のみです。 つまり、select id,name,valueとするには group by id,name,valueとする必要があるわけです。 そう考えると無理でしょう。 なぜ、「サブクエリを使わずに」なのでしょうか?
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
多分、無理だと思います。
お礼
そう思いつつ質問してしまいました・・・ ご回答ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
質問の意図がよくわからないのですが、サブクエリを使わずにということは テンポラリを一度つくって・・・というトンチではないですよね? SQLを少し学習すればわかりますがnameでgroup by してvalueのmaxを得る場合 そこでたまたまでてくるidはmaxのものであるという保証はありません。 なのでおっしゃることを一本のSQLでおこなうことはできません。 すなおにサブクエリをつかってください。
お礼
>idはmaxのものであるという保証はありません。 そうですよね。質問の用件に迫られることが多くて「やり方を知らないだけでできるのではないか?」と思い質問させていただきました。 ありがとうございました。
お礼
やはり無理ですよね(^^;) Java Persistence Query Language (JPQL)をコード内で使っています。移植性の観点からJPQLが導入されたもののSQLに戻ってしまいそうな予感が、ということで後の保守性を考えて可能な限りシンプルな文にしたいと思っていました。 質問の件、確証がもてなかったので質問させていただきました。 ありがとうございました。