我有一个User
表,其中包含ID
和Value
列。
常规排序是Value DESC
,但如果用户已经存在,我想在彼此之下输出相同的用户。希望它有意义(见下面所需的输出):
表:
User Value
1111 5000
2222 6000
3333 4000
1111 1000
输出:
User Value
2222 6000
1111 5000
1111 1000
3333 4000
答案 0 :(得分:1)
您可以执行的操作是运行预查询,以确定每个用户的最大值。然后可以使用该最大值来控制最终查询的排序。我已经使用CTE进行最大值预查询,然后可以将其用于连接回原始表以进行最终排序。
InMemoryCache
附注:
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;
也必须在顺序中,因为我们需要在同一个用户中保留值排序。