如何选择具有父子关系的记录对父级具有最高分数
Posted
技术标签:
【中文标题】如何选择具有父子关系的记录对父级具有最高分数【英文标题】:How to select records with parent child relation having maximum score for a parent 【发布时间】:2014-06-16 11:56:59 【问题描述】:我有这样的表格:
ExerciseAttempt(attemptId, ExerciseId, Score, studentId)
ExerciseMeta(ExerciseId, ParentId)
每个练习都有一个家长。父母可以有很多孩子练习。现在我想找到只考虑父母的一个孩子(得分最高的那个)的记录。
例如:
ExericeAttempt:
attemptId | ExerciseId | Score | studentId
1 | 10 | 18 | 10001
2 | 11 | 12 | 10001
3 | 12 | 20 | 10001
4 | 13 | 22 | 10001
5 | 13 | 21 | 10001
ExerciseMeta:
ExerciseId | ParentId
10 | 100
11 | 100
12 | 101
13 | 101
对于这些表格,结果应该是
attemptId | ExerciseId | Score | studentId
1 | 10 | 18 | 10001
4 | 13 | 22 | 10001
同样可以多次尝试同一个练习。 如何在 SQL SERVER 中实现这一点?
【问题讨论】:
【参考方案1】: ;with x as (
select ea.*, em.parentid,
row_number() over(partition by parentid order by score desc) as rn
from ExericeAttempt ea
inner join ExerciseMeta em
on ea.ExerciseId = em.ExerciseId
)
select attemptId, ExerciseId, Score, studentId
from x
where rn = 1
结果:
ATTEMPTID EXERCISEID SCORE STUDENTID
1 10 18 10001
4 13 22 10001
结果为@987654321@。
【讨论】:
(+1) 顺便说一句,冒昧地添加结果和小提琴。 @RagingBull at:dean for sqlfiddle.com/#!3/ab78c/1 这条记录不起作用 “它不工作”是什么意思?这些数据的预期结果是什么?以上是关于如何选择具有父子关系的记录对父级具有最高分数的主要内容,如果未能解决你的问题,请参考以下文章
如何从单个 MySQL 查询中获取 Parent 的所有子记录 [重复]
Scikit Learn K-means Clustering & TfidfVectorizer:如何将具有最高 tf-idf 分数的前 n 项传递给 k-means