SQL查询以获得另一列的每列分组的最低3个值

时间:2017-07-18 16:18:25

标签: sql nosql

所以我有一个包含这样一组信息的表

name     Type    PRICE
11111    XX      0.001
22222    YY      0.002
33333    ZZ      0.0001
11111    YY      0.021
11111    ZZ      0.0111
77777    YY      0.1
77777    ZZ      1.2

现在这些数字持续了大约一百万行,并且可能有超过20个相同的“名称”映射到20个不同的TYPE。但每个名称只有1个唯一类型。我的意思是11111上可以有XX,YY,ZZ,但它不能有YY,ZZ,YY。

我需要的是获得最低的3个价格以及每个名称的类型。

现在我可以通过以下方式获得每个名字的最低价格:

select name, type, min(price) from table group by name;

然而,这只是最低价,但我需要最低的3个价格。我已经尝试了几天,我似乎无法得到它。感谢所有帮助。

另外,如果我忘记了任何信息,请告诉我,我仍然想弄清堆栈溢出:P

哦,数据库是一个使用SQL语法的noSQL。

编辑:我似乎无法从我的表中获取我的示例数据的格式以正确显示

1 个答案:

答案 0 :(得分:0)

如果您的数据库支持窗口函数,并且允许数据中可能有三行以上三种价格中的任何一行,则应该这样做:

select the_table.*
from 
    the_table
    inner join (
        select name, price
        from (
            select name, price, row_number() over(partition by name order by price) as rn
            from the_table) as x
        where rn < 4
        ) as y on y.name=the_table.name and y.price=the_table.price;