我有一个包含多个条目的表格,我已根据销售标准订购了它。所以,如果条目如下:
Item Sales a 10 b 10 c 9 d 8 e 8 f 7
我想提取销售额最高和次数最多的商品。因此,
我想提取a
,b
和c
PostgreSQL中是否有任何功能可以帮助解决这个问题?
答案 0 :(得分: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;
你需要PostgreSQL 8.4 或更高版本。
对于旧版本,您可以:
SELECT *
FROM tbl
JOIN (
SELECT sales
FROM tbl
GROUP BY 1
ORDER BY 1 DESC
LIMIT 2
) t1 USING (sales)
答案 1 :(得分:1)
使用ORDER BY和LIMIT:
SELECT Item, Sales
FROM mytable
ORDER BY Sales DESC
LIMIT 2;
结果:
item sales ---- ----- a 10 b 9