SQL查询,以按另一列对每个列进行分组,获得最低3个值

SQL查询,以按另一列对每个列进行分组,获得最低3个值,sql,nosql,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个不同的类型。但每个名称只有

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

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个不同的类型。但每个名称只有一个唯一的类型。我的意思是11111可以有XX,YY,ZZ,但不能有YY,ZZ,YY

我需要的是得到最低的3个价格和他们是什么类型的每个名字

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

select name, type, min(price) from table group by name;
然而,这只是最低的价格,但我需要最低的3个价格。我已经试了好几天了,但我似乎没能得到它。感谢所有的帮助

另外,如果我忘记了任何信息,请告诉我,我仍在试图找出堆栈溢出:p

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


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

如果您的数据库支持窗口功能,并且考虑到您的数据中可能有三行以上且价格最低的数据,则应该这样做:

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;

如果您的数据库支持窗口功能,并且考虑到数据中可能有三行以上且价格为三种最低价格中的任何一种,则应该这样做:

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;

将类型添加到Group By,看看它是否会更改结果。@WEI_DBA因为名称,类型被定义为唯一的对,按名称分组,类型将不会导致分组。啊,对了。谢谢。您能发布您的结果和预期结果吗?NoSQL是否支持Select中的Top?您可以按第3列进行Top 3和Order。将type添加到Group by中,看看它是否会更改结果。@WEI_DBA因为名称,type被定义为一个唯一的对,按名称分组,type不会导致分组。啊,对了。谢谢。您能发布您的结果和预期结果吗?NoSQL是否支持Select中的Top?你可以做前三名,按第三列排序。可悲的是,当我试着这样做时,它说我做不到行号。当我试着这样做时,它说我做不到行号