質問: 「各地域毎の一番購入されている商品コードとその購入数、及び地域コードを併せて抽出する」 という処理を行おうとしているのですが、 **「テーブル1」 商品コード(CHAR),購入数(INT),地域コード(CHAR)** SELECT 商品コード, MAX(購入数), 地域コード FROM テーブル1 GROUP BY 地域コード とすると商品コードをGROUP BYのところに入れてくださいというようなエラーが返ってしまいます。 しかしGROUP BYに入れてしまうと出てくる結果がとても多くなってしまい、求めている結果が出せません。 ちなみに、 SELECT --商品コード, MAX(購入数), 地域コード FROM テーブル1 GROUP BY 地域コード とすると実行でき、各地域ごとのMAX(購入数)と地域コードは表示できます。 この結果にMAX(購入数)に対応した商品コードも合わせて表示するにはどうしたらいいでしょうか?ご教授頂けると幸いです。
回答: 副問い合わせで地域コードごとの最大購入数を求めて結合すればよいと思います。 ``` SELECT t.商品コード, t.購入数, t.地域コード FROM テーブル1 t INNER JOIN ( SELECT MAX(購入数) 購入数, 地域コード FROM テーブル1 GROUP BY 地域コード ) v ON t.購入数 = v.購入数 AND t.地域コード = v.地域コード ``` なお`WHERE (購入数, 地域コード) IN (SELECT MAX(購入数), 地域コード ...)`のように複数列の`IN`を指定できるRDBMSも存在します。