【问题标题】:Select from SQL table by one table's highest values [duplicate]按一个表的最大值从 SQL 表中选择 [重复]
【发布时间】:2021-04-03 18:25:20
【问题描述】:

我有一张带有userIDs 的表格,一张带有testIDs 的表格,还有一张带有userIDs 和testIDs 的表格。我如何仅使用 SQL,根据它对应的最高 testID 选择每个 userID 一次?

userIDTable: userID 1, userID 2, userID 3

mediatorTable: userID 1 testID 1, userID 2 testID 2, userID 1 testID 3, userID 2 testID 7, userID 3 testID 5

testIDTable: testID 1, testID 2, testID 3, testID 5, testID 7

SELECT userID 1 testID 3, userID 2 testID 7, userID 3 testID 5

【问题讨论】:

    标签: mysql sql subquery inner-join greatest-n-per-group


    【解决方案1】:

    每个用户只需要一行,最大的testid

    一个选项是joins,以及一个用于过滤预期测试的相关子查询。

    select ... -- enumerate the columns that you want here
    from mediator m 
    inner join users u on u.userid  = m.userid
    inner join tests t on t.test_id = m.testid
    where m.testid = (
        select max(m1.test_id)
        from mediator m1
        where m1.userid = m.userid
    )
    

    在 MySQL 8.0 中,还可以使用窗口函数:

    select ... 
    from (
        select m.*, 
            row_number() over(partition by userid order by testid desc) rn 
        from mediator m 
    ) m
    inner join users u on u.userid  = m.userid
    inner join tests t on t.test_id = m.testid
    where m.rn = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-05
      • 2021-07-25
      • 1970-01-01
      • 2017-11-13
      • 2023-01-06
      • 2011-12-14
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多