30690


「各地域毎の一番購入されている商品コードとその購入数、及び地域コードを併せて抽出する」  
という処理を行おうとしているのですが、

**「テーブル1」  
商品コード(CHAR),購入数(INT),地域コード(CHAR)**

SELECT 商品コード,  
MAX(購入数),  
地域コード  
FROM テーブル1  
GROUP BY 地域コード

とすると商品コードをGROUP BYのところに入れてくださいというようなエラーが返ってしまいます。  
しかしGROUP BYに入れてしまうと出てくる結果がとても多くなってしまい、求めている結果が出せません。

ちなみに、  
SELECT --商品コード,  
MAX(購入数),  
地域コード  
FROM テーブル1  
GROUP BY 地域コード  
とすると実行でき、各地域ごとのMAX(購入数)と地域コードは表示できます。  
この結果にMAX(購入数)に対応した商品コードも合わせて表示するにはどうしたらいいでしょうか？ご教授頂けると幸いです。


CC BY-SA 3.0
2016-11-26T11:46:29.137
30689
2016-11-26T12:15:28.777
19727
question
sql
SQLのGROUP BYを使った複数SELECTの仕方について


副問い合わせで地域コードごとの最大購入数を求めて結合すればよいと思います。

[code]

    SELECT t.商品コード,
           t.購入数,
           t.地域コード
      FROM テーブル1 t
     INNER JOIN
    (
        SELECT MAX(購入数) 購入数,
               地域コード
          FROM テーブル1
         GROUP BY 地域コード
    ) v ON t.購入数 = v.購入数 AND t.地域コード = v.地域コード
    
[/code]

なお`WHERE (購入数, 地域コード) IN (SELECT MAX(購入数), 地域コード
...)`のように複数列の`IN`を指定できるRDBMSも存在します。


CC BY-SA 3.0
2016-11-26T12:15:28.777
30690
2016-11-26T12:15:28.777
5750
30689
answer