mysql中的复杂查询

时间:2011-08-26 04:44:50

标签: mysql

我在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

所以请帮助我想要的这个输出,我已经尝试但是我没有得到它想要的输出。

2 个答案:

答案 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

其余的我留给你。 : - )