Как найти медиану в SQL Server - PullRequest
0 голосов
/ 07 января 2010

У меня есть одна таблица, в которой хранятся оценки учеников по классам. Например, в каждом классе 30 учеников, поэтому для каждого класса по 30 баллов. Я хотел бы сделать простой отчет, который усредняет, выполняет медиану и режим для каждого набора данных в классе. Таким образом, каждый класс будет иметь среднее значение, медиану и режим. Я знаю, что в SQL Server нет встроенной функции для медианы и режима, и я нашел примеры SQL для медианы. Тем не менее, образцы, которые я нашел, не делали никакой группировки, я нашел:

SELECT
(
 (SELECT MAX(Value) FROM
   (SELECT TOP 50 PERCENT Value FROM dbo.VOrders ORDER BY Value) AS H1)
 +
 (SELECT MIN(Value) FROM
   (SELECT TOP 50 PERCENT Value FROM dbo.VOrders ORDER BY Value DESC) AS H2)
) / 2 AS Median

Можно ли изменить, чтобы добавить группу, чтобы я получил среднее значение для класса?


Не думаю, что я достаточно ясен, я хотел бы, чтобы SQL возвратил один набор данных, выглядя примерно так:

MEDIAN CLASS 
====== ===== 
 90     BIO 
 77     CHEM

1 Ответ

0 голосов
/ 11 января 2010

это ответ:

WITH CTE AS (
SELECT e_id, 
   scale, 
   ROW_NUMBER() OVER(PARTITION BY e_id ORDER BY scale ASC) AS rn,   
   COUNT(scale) OVER(PARTITION BY e_id) AS cn
FROM waypoint.dbo.ScoreMaster
WHERE scale IS NOT NULL
)
SELECT e_id,

cast(AVG (cast(scale as decimal(5,2))) as decimal(5,3)) as [AVG],
cast (STDEV(cast(scale as decimal(5,1))) as decimal(5,3)) as [STDDEV],   
AVG(CASE WHEN 2 * rn - cn BETWEEN 0 AND 2 THEN scale END) AS FinancialMedian,
MAX(CASE WHEN 2 * rn - cn BETWEEN 0 AND 2 THEN scale END) AS StatisticalMedian

from CTE
GROUP BY e_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...