当前位置: 首页 > 知识库问答 >
问题:

从一定数量的具有相同主键的行中,如何选择某一列中值最高的行?

谭云瀚
2023-03-14

我有一个学生表和一个成绩表。

    < li >学生具有学生id(主键)、姓名、出生日期、地址、电子邮件和级别列。 < li>Grades包含列student_id(主/外键)、course_id(主/外键)和grade。

“成绩”如下所示:

student_id|course_id|grade
===========================
    1     |    1    |   A
    1     |    2    |   B
    1     |    3    |   A
    3     |    1    |   F
    3     |    3    |   C
    .
    .
    .
    .

这不是整个表格,但你明白了要点。我正在尝试编写一个查询,选择学生的姓名和该学生的最高分。由于我是SQL的新手,所以这对我来说有点令人困惑。到目前为止,我的尝试是这样的:

SELECT "Students".name, "Grades".grade FROM "Students" INNER JOIN
"Grades" ON "Students".student_id = "Grades".student_id GROUP BY name, 
grade HAVING MIN(grade) <= 'F';

这是错误的,我知道原因,但我不知道从这里往哪里走。

共有2个答案

令狐嘉禧
2023-03-14

如何选择某一列中值最高的那些?

大胆强调我的。

分组依据有助于获得单个列的最大值。要获得具有最大值的行,您必须执行更多操作。

Postgres中每个学生获得一行的简单解决方案是使用 DISTINCT ON

SELECT *
FROM   students s
JOIN  (
   SELECT DISTINCT ON (student_id) *
   FROM   grades
   ORDER  BY student_id, grade
   ) g USING (student_id);

最低的成绩恰好是这里的“最高”成绩
要获取值最高的值(可能是复数),请使用窗口函数rank()

SELECT *
FROM   students s
JOIN  (
   SELECT *, rank() OVER (PARTITION BY student_id ORDER BY grade) AS rnk
   FROM   grades
   ) g USING (student_id)
WHERE  g.rnk = 1;
李睿
2023-03-14
SELECT Students.name, min(Enroll.grade)  
  FROM Students 
 INNER JOIN Enroll 
    ON Students.student_id = Enroll.student_id 
 GROUP BY name, 
 类似资料:
  • 问题内容: 如何从表中选择所有内容,并且如果列的值相同,则仅选择具有最大值的行,因此,如果有这样的表: 它只会选择ID最高的“ bob”,因此结果将返回: 谢谢你。 问题答案: 您可以使用子查询来计算每个名称的最大ID,然后返回与该子查询返回的ID匹配的所有行: 请看这里的小提琴。

  • 我使用键和构建以下面板数据: 让我们假设2018年发生了一次冲击。我希望通过对上一行和下一行进行切片,这些行的值与shock行的值相同。 我举几个例子来说明。对于,数据集如下所示: 2018年的

  • 问题内容: 在MySQL中: 如果我们有两个表: 和: 我想从意见表中具有相应的具有特定表(该列表)。 例如,我想选择所有从该行有一个表中的表: 我希望这些结果: 而如果我选择所有从该行表中有一个的在表: 我希望得到这样的结果: 我真的希望有人能提供帮助,谢谢大家! 我想我需要参加吗?任何指针都将是很好的,并且如果可能的话,可以做一个简短的解释,以便我可以找出我要去的地方->这样我下次就知道了!

  • 问题内容: 该主题的解决方案使我不知所措。 我有一个看起来像的表格(除与我的问题无关的其他字段之外): 名称,卡号,会员类型 现在,我想要一个显示卡号和成员类型相同的行的视图。这两个字段都是整数。名称为VARCHAR。名称不是唯一的,并且相同的名称也应显示重复的卡号,会员类型。 即,如果下表是表格: 我想要: 只需按卡号排序即可使其对人类有用。 最有效的方法是什么? 问题答案: 由于您提到的名称可

  • 我需要获取mariaDB中某些列(例如,列)中具有不同值的最后一行(例如,)。 结果:

  • 问题内容: 我的表是: 我想列出一组具有相同疾病的患者。pid和did分别是患者和疾病表中的主键,并且是has_disease表中的外键。 样本数据: 耐心 疾病 has_disease 以上数据的答案是因为它们具有完全相同的疾病1和3,即疟疾和病毒热。我想知道如何在mysql中实现这一点。 。 问题答案: 该查询返回给我们患者及其疾病。 通过完整的剂量列表比较2组患者,并将pid保留为相同的剂量