我有一张这样的桌子:
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
试图使用像这样的东西:
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-value对:
select SKU, ITEM, VALUE from import where (sku,value) in (select sku, max(value) from import group by sku);
如果是平局,例如SKU 1503818,此查询将为您获得两条记录。