SQL按值排序,但将来自同一用户的数据保存在一起

时间:2018-05-21 14:58:40

标签: sql-server

我有一个User表,其中包含IDValue列。 常规排序是Value DESC,但如果用户已经存在,我想在彼此之下输出相同的用户。希望它有意义(见下面所需的输出):

表:

User      Value
1111      5000
2222      6000  
3333      4000  
1111      1000

输出:

User   Value
2222   6000
1111   5000
1111   1000
3333   4000

1 个答案:

答案 0 :(得分:1)

您可以执行的操作是运行预查询,以确定每个用户的最大值。然后可以使用该最大值来控制最终查询的排序。我已经使用CTE进行最大值预查询,然后可以将其用于连接回原始表以进行最终排序。

InMemoryCache

SqlFiddle here

附注:

  • 我们需要在最终查询中保留addTypename: true作为第二个排序条件,因为如果最大值存在关系,那么我假设您希望将用户数据保持在一起。
  • 并且WITH MaxUserPrice AS ( SELECT [User], MAX([Value]) AS MaxValue FROM MYTABLE GROUP BY [User] ) SELECT mt.[User], mt.[Value] FROM MYTABLE mt INNER JOIN MaxUserPrice mup ON mt.[User] = mup.[User] ORDER BY mup.MaxValue DESC, mt.[User], mt.[Value] DESC; 也必须在顺序中,因为我们需要在同一个用户中保留值排序。