我有一张这样的桌子:
- SKU ITEM VALUE
- 1503796 1851920 0,9770637
- 1503796 1636691 0,9747891
- 1503796 1503781 0,9741025
- 1503796 3205763 0,9741025
- 1503801 1999745 0,9776622
- 1503801 1999723 0,9718825
- 1503801 3651241 0,9348839
- 1503801 1773569 0,9331309
- 1503811 1439825 0,97053134
- 1503811 1636684 0,96297866
- 1503811 1636671 0,96003973
- 1503811 1600553 0,9535771
- 1503818 1636708 0,9440251
- 1503818 1636709 0,9440251
- 1503818 1779789 0,9423958
- 1503818 3322310 0,9369579
我需要获得这样的输出(以最大值分组):
- SKU ITEM VALUE
- 1503796 1851920 0,9770637
- 1503801 1999745 0,9776622
- 1503811 1439825 0,97053134
- 1503818 1636708 0,9440251
试图像这样使用smth:
- select SKU,ITEM,VALUE from import
- where value=(select max(value) from import )
但它只选择一行具有最大值.如何重写查询?
解决方法
使用ROW_NUMBER对记录进行排名,以便sku的最大值为#1.然后只保留那些排名第一的记录.
- select sku,item,value
- from
- (
- select
- mytable.*
- row_number() over (partition by sku order by value desc) as rn
- from mytable
- )
- where rn = 1;
对于SKU 1503818,您将获得以下两种方法之一:
- 1503818 1636708 0,9440251
- 1503818 1636709 0,9440251
如果您需要特定的项目(例如具有较高项目编号的项目),请将此条件添加到Row_Number的ORDER BY子句中.
至于您自己尝试的查询:您应该寻找sku值对:
- select SKU,VALUE from import
- where (sku,value) in (select sku,max(value) from import group by sku);
如果出现平局,与SKU 1503818一样,此查询将为您提供两个记录.