代码之家  ›  专栏  ›  技术社区  ›  chamara

SQL查询问题

  •  1
  • chamara  · 技术社区  · 14 年前

    我有一个名为studentmarks的SQL表,它由studentid、subjectname、subjectmark组成。

    我想写一个存储过程来检索每个学生的studentid、totalsubjectmarks、marksaverage、classposition。我需要从marksaverage中找到classposition。对于Marksaverage最高的学生,班级排名应为1。其他学生的排名应为2、3、4…… 有人能帮我吗????

    谢谢您。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Michael Pakhantsov    14 年前
      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
      )
    
        2
  •  1
  •   Pranay Rana    14 年前

    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
    
        3
  •  1
  •   Adriaan Stander    14 年前

    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