2011-08-26 222 views
0

我有這樣的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 

我要像 顯示所有學科,在與學生姓名perticular主題higest標記的結果,

max_marks sub_name  student_name 
-------------------------------------- 
78   english  x2 
56   maths  x1 
83   science  x2 

所以請幫助這個輸出,我想,我已經嘗試過,但我沒有得到它的願望輸出。

+0

是的,這看起來像一個家庭作業可疑。向我們顯示您的查詢。我會給你一個提示:MAX()和JOIN。 –

+0

@Riho作業標籤不被棄用? (http://meta.stackexchange.com/questions/60422/is-homework-an-exception/70233) – glglgl

回答

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

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 

其餘的我留給你。 :-)