我有一个学生表和一个成绩表。
“成绩”如下所示:
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';
这是错误的,我知道原因,但我不知道从这里往哪里走。
如何选择某一列中值最高的那些?
大胆强调我的。
分组依据
有助于获得单个列的最大值。要获得具有最大值的行,您必须执行更多操作。
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;
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保留为相同的剂量