2010-09-23 7 views
1

J'ai une table SQL appelée StudentMarks.which se composent de StudentID, SubjectName, SubjectMarkproblème de requête SQL

Je veux écrire une procédure stockée pour récupérer StudentID, TotalSubjectMarks, MarksAverage, ClassPosition pour chaque student.I doivent trouver le ClassPosition de la MarksAverage. Pour l'étudiant qui a le score le plus élevé, ClassPosition devrait être 1. Les autres devraient obtenir la position 2,3,4 .... Quelqu'un peut-il m'aider avec ceci ???

Merci.

+1

S'il vous plaît modifier votre question; en ajoutant les points suivants, vous obtiendrez peut-être de meilleures réponses: 1. Qu'avez-vous essayé jusqu'à présent (c'est important, sinon les gens penseront "faites vos devoirs" et ignorez la question)? 2. Quels résultats avez-vous obtenus? 3. En quoi cela diffère-t-il des résultats que vous attendiez? – Piskvor

Répondre

2
SELECT StudentID, TotalSubjectMark, MarksAverage, 
    ROW_NUMBER() OVER (ORDER BY MarksAverage DESC) ClassPosition 
    FROM (
    SELECT StudentID, 
    SUM(SubjectMark) TotalSubjectMark, 
    AVG(SubjectMark) MarksAverage 
    FROM StudentMarks sm 
    GROUP BY StudentId 
) 
1

Essayez ceci:

select * , ROW_NUMBER() OVER(ORDER BY avgmarks) AS ClassPosition from 
(
select 
studentid, sum(subjectmark) as total , AVG(subjectmark) as avgmarks 
from studentmarks group by studentid 
) d 
1

Utilisation d'un serveur sql 2005+ vous pouvez essayer

DECLARE @StudentMarks TABLE(
     StudentID INT, 
     SubjectName VARCHAR(50), 
     SubjectMark FLOAT 
) 

INSERT INTO @StudentMarks SELECT 1, 'A', 80 
INSERT INTO @StudentMarks SELECT 1, 'B', 80 
INSERT INTO @StudentMarks SELECT 1, 'C', 80 
INSERT INTO @StudentMarks SELECT 2, 'A', 60 
INSERT INTO @StudentMarks SELECT 2, 'B', 60 
INSERT INTO @StudentMarks SELECT 2, 'C', 60 


;WITH Marks AS (
     SELECT StudentID, 
       SUM(SubjectMark) TotalSubjectMarks, 
       AVG(SubjectMark) MarksAverage 
     FROM @StudentMarks 
     GROUP BY StudentID 
) 
SELECT *, 
     ROW_NUMBER() OVER(ORDER BY MarksAverage DESC) Position 
FROM Marks