SQL Server режим SQL - PullRequest
       5

SQL Server режим SQL

2 голосов
/ 12 января 2010

У меня есть таблица со списком оценок учеников в классе. Я хочу, чтобы набор результатов был похож на:

BIO...B
CHEM...C

Где "B" и "C" - режимы для класса. Я могу получить режим всех классов, но не знаю, как получить режим для класса

Ответы [ 3 ]

4 голосов
/ 12 января 2010

здесь, что-то вроде этого в 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

или, может быть, просто:

;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
2 голосов
/ 12 января 2010

Используйте предложение GROUP BY.

SELECT className, ClassMode(className)
FROM Grades
GROUP BY className

Ваша функция Mode (), конечно, должна быть создана, но это будет простая функция, такая как:

CREATE FUNCTION ClassMode(@ClassName varchar(50))
RETURNS varchar(2)
AS
BEGIN
    Declare @temp varchar(2)

    SELECT @temp = TOP 1 Grade, COUNT(*) Grades as frequency
    FROM Grades
    WHERE ClassName = @ClassName
    GROUP BY ClassName
    ORDER BY frequency DESC

    RETURN @temp
END
0 голосов
/ 12 января 2010

Вам просто нужно GROUP BY ClassName

SELECT ClassName, MODE(Grade) FROM YourTable GROUP BY ClassName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...