1

複数のエントリがあるテーブルがあり、販売基準に従って注文しました。したがって、エントリが次のような場合:

アイテム販売
10
b 10
c 9
d 8
e 8
f 7

売上高が最も多いアイテムと2番目に多いアイテムを抽出したいと思います。aそのため、、、を抽出したいと思いbますc
これを助けることができるPostgreSQLの関数はありますか?

4

2 に答える 2

2

上位2つの売上値のいずれかを持つすべての行を含めるには、dense_rank()ウィンドウ関数を使用できます。

WITH x AS (
   SELECT *
         ,dense_rank() OVER (ORDER BY sales DESC) AS rnk
   FROM   tbl
   )
SELECT item, sales
FROM   x
WHERE  rnk < 3;

そのためにはPostgreSQL8.4以降が必要です


古いバージョンの場合、次のことができます。

SELECT *
FROM   tbl
JOIN   (
    SELECT sales
    FROM   tbl
    GROUP  BY 1
    ORDER  BY 1 DESC
    LIMIT  2
    ) t1 USING (sales)
于 2012-03-11T04:06:55.073 に答える
1

ORDER BYとLIMITを使用します:

  SELECT Item, Sales
    FROM mytable 
ORDER BY Sales DESC 
   LIMIT 2;

結果:

アイテム販売
---- -----
10
b 9

SQLフィドル

于 2012-03-11T03:32:29.090 に答える