【问题标题】: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