如何选择具有父子关系的记录对父级具有最高分数

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 这条记录不起作用 “它不工作”是什么意思?这些数据的预期结果是什么?

以上是关于如何选择具有父子关系的记录对父级具有最高分数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Fluent API 映射这种冗余的父子关系

如何设计具有父子关系的数据库?

SQL查询以选择在同一列中具有不同值的子记录的父级

如何使用 SQL 在数据库中检测具有嵌套关系的父级?

如何从单个 MySQL 查询中获取 Parent 的所有子记录 [重复]

Scikit Learn K-means Clustering & TfidfVectorizer:如何将具有最高 tf-idf 分数的前 n 项传递给 k-means