6

私の質問はSQL select Group queryに似ています。しかし、スキーマに変更があり、以下のように異なる結果が必要です。指定されたリンクの解決策では、適切な解決策が得られません。これを解決するには、 SQL フィドルを使用できます。

以下は私のテーブルです

表1

+--------+----------+---------+  
| amount | make     | product |  
+--------+----------+---------+  
|    100 | Nokia    | Mobiles |   
|    300 | Samesung | Mobiles |   
|    700 | Micromax | Mobiles |   
|   1000 | Karbonn  | Mobiles |   
|    300 | Lava     | Mobiles |   
|    100 | Floyer   | Gift    |   
|    500 | Arichies | Gift    |   
|    300 | Feeling  | Gift    |   
+--------+----------+---------+  

ここで、各製品の最低金額を 2 つ表示したいと思います。金額が同じ場合は、make 列のアルファベットの昇順に従って誰でも...

したがって、以下のような結果が得られる単一の SQL クエリを作成したいと思います。

+--------+----------+---------+  
| amount | make     | product |  
+--------+----------+---------+  
|    100 | Nokia    | Mobiles |   
|    300 | Lava     | Mobiles |   
|    100 | Floyer   | Gift    |   
|    300 | Feeling  | Gift    |   
+--------+----------+---------+ 

そのようなクエリを作成するのを手伝ってください..

4

3 に答える 3

1

これはあなたを助けるはずです..

最初のものにはバグがありました、それは今更新されています。

SELECT  t.*
FROM    (
    SELECT  @lim := 2,
            @cg := ''
    ) vars,
    (select * from Table1 order by product,amount, make)  t
WHERE   CASE WHEN @cg <> product THEN @r := @lim ELSE 1 END > 0
    AND (@r := @r - 1) >= 0
    AND (@cg := product) IS NOT NULL
ORDER BY
    product,amount, make

それとフィドラーを楽しんでください: http ://sqlfiddle.com/#!2/bdd1a/115/0

于 2012-09-26T06:54:26.810 に答える
0
SELECT amount, make,product
FROM 
  (SELECT  ROW_NUMBER() OVER (PARTITION BY product ORDER BY amount) AS RowID,*
   FROM Table1) RESULT
WHERE RowID <= 2

これはPostgreSQLでうまく機能します。mysqlで同様のウィンドウ関数を実行することにより、mysqlはウィンドウ関数をサポートしません

于 2012-09-26T06:54:13.173 に答える
0

これを試してください:

select * from table1 ORDER BY amount DESC LIMIT 2;
于 2012-09-26T06:48:41.377 に答える