2011-08-26 4 views
0

j'ai trois tables dans une base MySQL comme ça,requête complexe dans une base 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 

je veux le résultat comme affichage tout sujet avec la marque higest dans le thème perticular avec le nom de l'étudiant,

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

si s'il vous plaît aider pour cette sortie que je veux, j'ai essayé mais je ne l'obtiens pas sortie de désir.

+0

Oui, cela ressemble étrangement à un devoir. Montrez-nous votre requête. Je vais vous donner un indice: MAX() et JOIN. –

+0

@Riho L'étiquette de devoirs n'est-elle pas obsolète? (http://meta.stackexchange.com/questions/60422/is-homework-an-exception/70233) – glglgl

Répondre

1

Que diriez-vous de quelque chose comme ceci?

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) 

Bien sûr, vous devrez le joindre à des tables de recherche de noms.

Je dois dire, il est tôt ici, donc j'ai peut-être raté quelque chose.

BR

0

La syntaxe générale, simplifiée dans ce cas est

SELECT stuff FROM joined tables ORDER BY whatever 

Le plus simple est le ORDER BY: vous voulez trier par ordre décroissant par des marques, de sorte que vous ORDER BY marks DESC.

D'où proviennent les données? De triz, joint aux autres. Donc

triz JOIN triz_sti USING (stu_id) JOIN triz_sub USING (sub_id) 

Et vous voulez afficher les marques.

Ainsi, vous obtenez

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 

.

Le reste je vous laisse. :-)