我想按价格递增的替代出版商列出所有行,请参见下面的示例表。
id publisher price
1 ABC 100.00
2 ABC 150.00
3 ABC 105.00
4 XYZ 135.00
5 XYZ 110.00
6 PQR 105.00
7 PQR 125.00
预期的结果是:
id publisher price
1 ABC 100.00
6 PQR 105.00
5 XYZ 110.00
3 ABC 105.00
7 PQR 125.00
4 XYZ 135.00
2 ABC 150.00
所需的 SQL 是什么?
最佳答案
应该这样做:
select id, publisher, price
from (
select id, publisher, price,
row_number() over (partition by publisher order by price) as rn
from publisher
) t
order by rn, publisher, price
窗口函数为每个发布商价格分配唯一的数字。基于此,外部 order by 将首先显示所有 rn = 1 的行,这些行是每个发布者的价格最低的行。每个发布商的第二行是第二低的价格,依此类推。
SQLFiddle 示例:http://sqlfiddle.com/#!4/06ece/2
关于sql - 根据替代发布者选择所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363073/