SQL Server mode SQL

后端 未结 3 1356
我在风中等你
我在风中等你 2021-01-21 16:49

I have a table that list students\' grades per class. I want a result set that looks like:

BIO...B
CHEM...C

Where the \"B\" and \"C\" are the m

3条回答
  •  借酒劲吻你
    2021-01-21 17:11

    here, something like this on SQL 2005/2008:

    ;WITH 
      Counts AS (
        SELECT ClassName, Grade, COUNT(*) AS GradeFreq 
        FROM Scores
        GROUP BY ClassName, Grade
        )
    , Ranked AS (
        SELECT ClassName, Grade, GradeFreq
        , Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY GradeFreq DESC)
        FROM Counts
        )
    SELECT * FROM Ranked WHERE Ranking = 1
    

    or perhaps just:

    ;WITH Ranked AS (
      SELECT 
        ClassName, Grade
      , GradeFreq = COUNT(*)
      , Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY COUNT(*) DESC)
      FROM Scores
      GROUP BY ClassName, Grade
      )
    SELECT * FROM Ranked WHERE Ranking = 1
    

提交回复
热议问题