【问题标题】:SQL Select Distinct Values, but order by a different value and also select corresponding values from other columnsSQL 选择不同的值,但按不同的值排序,并从其他列中选择相应的值
【发布时间】:2021-03-11 07:51:05
【问题描述】:

我有一张这样的桌子:

stackId  userId  value
s1       u1      21
s1       u2      13
s1       u1      14
s2       u3      91
s2       u2      44

我想在哪里找出所有不同的stackId,以及每个唯一stackId的最大值,以及对应的userId,即:

s1       u1      21
s2       u3      91

我知道如何选择不同的然后按最大值排序:

select distinct(stackId), max(value) from table group by stackId order by stackId;

这会给我

s1       21
s2       91

但是我很难获得与该 stackId 的最大值相对应的 userId,有人可以解释一下吗?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: mysql sql


【解决方案1】:
 WITH CTE(stackId,  userId,  value) AS 
  (

    SELECT 's1',       'u1' ,     21 UNION ALL 
    SELECT's1' ,      'u2',      13  UNION ALL 
    SELECT's1'  ,     'u1',      14  UNION ALL 
    SELECT's2'   ,    'u3' ,     91  UNION ALL 
    SELECT's2'    ,   'u2',      44   
 )
SELECT X.stackId,X.userId,X.VALUE FROM
(
   SELECT C.stackId,C.userId,C.value,
      ROW_NUMBER()OVER(PARTITION BY C.stackId ORDER BY C.value DESC)AS XCOL
     FROM CTE AS C
)AS X WHERE X.XCOL=1

您可以使用 WINDOW 函数 ROW_NUMBER() 来实现这一点。上方查询中的 CTE 表示您提供的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多