sql – 使用Max()函数选择组值

前端之家收集整理的这篇文章主要介绍了sql – 使用Max()函数选择组值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张这样的桌子:
  1. SKU ITEM VALUE
  2. 1503796 1851920 0,9770637
  3. 1503796 1636691 0,9747891
  4. 1503796 1503781 0,9741025
  5. 1503796 3205763 0,9741025
  6. 1503801 1999745 0,9776622
  7. 1503801 1999723 0,9718825
  8. 1503801 3651241 0,9348839
  9. 1503801 1773569 0,9331309
  10. 1503811 1439825 0,97053134
  11. 1503811 1636684 0,96297866
  12. 1503811 1636671 0,96003973
  13. 1503811 1600553 0,9535771
  14. 1503818 1636708 0,9440251
  15. 1503818 1636709 0,9440251
  16. 1503818 1779789 0,9423958
  17. 1503818 3322310 0,9369579

我需要获得这样的输出(以最大值分组):

  1. SKU ITEM VALUE
  2. 1503796 1851920 0,9770637
  3. 1503801 1999745 0,9776622
  4. 1503811 1439825 0,97053134
  5. 1503818 1636708 0,9440251

试图像这样使用smth:

  1. select SKU,ITEM,VALUE from import
  2. where value=(select max(value) from import )

但它只选择一行具有最大值.如何重写查询

解决方法

使用ROW_NUMBER对记录进行排名,以便sku的最大值为#1.然后只保留那些排名第一的记录.
  1. select sku,item,value
  2. from
  3. (
  4. select
  5. mytable.*
  6. row_number() over (partition by sku order by value desc) as rn
  7. from mytable
  8. )
  9. where rn = 1;

对于SKU 1503818,您将获得以下两种方法之一:

  1. 1503818 1636708 0,9440251
  2. 1503818 1636709 0,9440251

如果您需要特定的项目(例如具有较高项目编号的项目),请将此条件添加到Row_Number的ORDER BY子句中.

至于您自己尝试的查询:您应该寻找sku值对:

  1. select SKU,VALUE from import
  2. where (sku,value) in (select sku,max(value) from import group by sku);

如果出现平局,与SKU 1503818一样,此查询将为您提供两个记录.

猜你在找的MsSQL相关文章