我在mysql中有三个表,像这样,
triz_sti
stu_id name
-----------------
1 x1
2 x2
triz_sub
sub_id sub_name
------------------
1 english
2 maths
3 science
triz
stu_id sub_id marks
-------------------------
1 1 23
1 2 56
1 3 83
2 1 78
2 2 23
2 3 50
我希望结果如此 用学生姓名显示所有具有最高分的主题,
max_marks sub_name student_name
--------------------------------------
78 english x2
56 maths x1
83 science x2
所以请帮助我想要的这个输出,我已经尝试但是我没有得到它想要的输出。
答案 0 :(得分:1)
这样的事情怎么样?
SELECT
t.stu_id, t.sub_id, t.marks
FROM
triz t
JOIN (SELECT sub_id, MAX(marks) max_mark FROM triz GROUP BY sub_id) a ON (a.sub_id = t.sub_id AND a.max_mark = t.marks)
当然,您需要将其与名称的查找表一起加入。
不得不说,现在已经很早了,所以我可能错过了一些东西。
BR
答案 1 :(得分:0)
这种情况下的一般简化语法是
SELECT stuff FROM joined tables ORDER BY whatever
最简单的是ORDER BY
:您希望按标记降序排序,因此ORDER BY marks DESC
。
数据来自哪里?来自triz
,加入其他人。所以
triz JOIN triz_sti USING (stu_id) JOIN triz_sub USING (sub_id)
你想要显示标记。
所以你得到了
SELECT marks, sub_name, name AS student_name
FROM triz JOIN triz_sti USING (stu_id) JOIN triz_sub USING (sub_id)
ORDER BY marks DESC
其余的我留给你。 : - )