2010-01-07 7 views
0

J'ai une seule table qui contient les scores des élèves par leurs classes. Par exemple, chaque classe compte 30 élèves, il y a donc 30 scores pour chaque classe. Je voudrais faire un rapport simple qui fait la moyenne, fait une médiane et un mode, pour chaque ensemble de données par classe. Ainsi, chaque classe aura une moyenne, une médiane et un mode. Je sais que SQL Server n'a pas de fonction intégrée pour la médiane et le mode, et j'ai trouvé des exemples de SQL pour la médiane. Cependant, les échantillons que j'ai trouvé ne faire aucun groupe, je trouve:Comment trouver la médiane dans SQL Server

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 

Est-il possible de modifier pour ajouter un groupe par si je reçois une valeur médiane par classe?


je ne t pense que j'été assez clair, je voudrais que le SQL pour retourner un ensemble de données, à la recherche quelque chose comme ceci:

MEDIAN CLASS 
====== ===== 
90  BIO 
77  CHEM 
+0

S'il vous plaît nous montrer votre schéma de données, presque impossible d'aider sans elle. – Hogan

+0

Tableau Nom: ALL_SCORES champs: id, studentName, score, classe données Exemples: 1, Homer, 100, BIO 2, marge, 90, BIO 3, Bart, 85, BIO 4, lisa, 100, CHEM 5, henry, 55, CHEM 6, jed, 77, CHEM Pour chaque classe, aimerait les statistiques – bmw0128

Répondre

0

c'est la réponse:

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 
Questions connexes