2016-05-12 42 views
0

我有一個學校的學生和教師的數據庫,並在一個表中的主題中得分。用原始數據返回SQL中的子數據

Teacher | Student | Score 

Judy | Jack | 45 
Judy | Jane | 48 
John | Jerry | 37 

我需要一個SQL查詢,返回按照老師分組得分> 40的學生比例。

我不能想到這樣做的有效方法,而不使用臨時表。

有什麼建議嗎?

+1

那麼什麼是預期的結果(?,與該表數據) – jarlh

回答

1
SELECT Teacher, SUM(CASE WHEN Score > 40 THEN 1 ELSE 0 END)/COUNT(*) 
FROM marks 
GROUP BY Teacher 
+0

小錯誤:要麼COUNT(CASE當Score> 40 THEN 1 ELSE null END)'或'SUM(CASE WHERE Score> 40 THEN 1 ELSE 0 END)'。 –

+1

@ThorstenKettner對我犯了這個錯誤感到羞恥。我嘗試downvoting自己,但它不會讓我:-) –

0

它可與CASE做內sum

CREATE TABLE #TEST (Teacher varchar(32), Student varchar(32), score int) 

INSERT INTO #TEST (Teacher,Student,score) 
VALUES 
('Adam','Berta',32), 
('Adam','Cecil',41), 
('Adam','David',52), 
('Erik','Fredrick',43), 
('Erik','Georgia',66) 


SELECT Teacher, 
     SUM(CASE WHEN Score > 40 THEN 1 ELSE 0 END) AS Success, 
     COUNT(Student) AS Total, 
     100*SUM(CASE WHEN Score > 40 THEN 1 ELSE 0 END)/COUNT(Student) AS Fraction 
FROM #TEST 
GROUP BY Teacher 

DROP TABLE #TEST 

我從這次得到的結果是:

Teacher Success Total Fraction 

Adam 2 3 66 
Erik 2 2 100