2013-03-01 33 views
0

我有三列在同一列中的多個計數,並插入到另一個表

1. Student Name 
2. Class Name 
3. Test result 

的學生需要有不同的結果不止一個測試學生表。我試圖將數據獲取到具有

1. Stundent Name+CLass Name (Concatenated) 
2. Pass (No of tests Passed) 
3. Fail (No of tests failed) 
4. Absent (No of tests Absent) 

另一個表我用

select count(*) 
from Student 
where Result in ('Passed') 
group by StuName, ClassName; 

得到的傳遞主題爲每個STU +級組合計數。類似的失敗和缺席測試。

我應該如何修改代碼以在表格中插入兩個?

回答

4

MySQL支持直列IF聲明,

SELECT CONCAT(StudentName, ' ', ClassName) Student_Class, 
     SUM(test = 'PASSED') totalPass, 
     SUM(test = 'Failed') totalFailed, 
     SUM(test = 'Absent') totalAbsent 
FROM student 
GROUP BY CONCAT(StudentName, ' ', ClassName) 

,當你要插入從查詢結果的上方,使用INSERT INTO..SELECT聲明,

INSERT INTO tableNAME(col1, totalPass, totalFailed, totalAbsent) 
SELECT CONCAT(StudentName, ' ', ClassName) Student_Class, 
     SUM(test = 'PASSED') totalPass, 
     SUM(test = 'Failed') totalFailed, 
     SUM(test = 'Absent') totalAbsent 
FROM student 
GROUP BY CONCAT(StudentName, ' ', ClassName) 
+0

不錯。很短的解決方案。 – Walter 2013-03-01 14:18:08

+0

我不知道有可能SUM布爾值。尼斯。 – 2013-03-01 14:24:26

2

您可以輕鬆地支點的使用集合函數的數據與CASE

select concat(StuName, ',', ClassName) StuNameClass, 
    sum(case when result = 'Passed' then 1 else 0 end) Passed, 
    sum(case when result = 'Fail' then 1 else 0 end) Fail, 
    sum(case when result = 'Absent' then 1 else 0 end) Absent 
from Student 
group by concat(StuName, ',', ClassName); 

然後,如果你想將數據插入到另一個表:

insert into Table2 (StudentClassName, Passed, Fail, Absent) 
select concat(StuName, ',', ClassName) StuNameClass, 
    sum(case when result = 'Passed' then 1 else 0 end) Passed, 
    sum(case when result = 'Fail' then 1 else 0 end) Fail, 
    sum(case when result = 'Absent' then 1 else 0 end) Absent 
from Student 
group by concat(StuName, ',', ClassName); 
+0

再次感謝Bluefeet。 :) – 2013-03-01 14:31:36

+0

@KumaranSenapathy不客氣! :) – Taryn 2013-03-01 14:31:55

1
INSERT INTO t (name_class, passed_count, failed_count, absent_count) 
SELECT CONCAT(StuName, ' ', ClassName) AS name_class, 
     SUM(IF(Result='Passed', 1, 0)) AS passed_count, 
     SUM(IF(Result='Failed', 1, 0)) AS failed_count, 
     SUM(IF(Result='Absent', 1, 0)) AS absent_count 
FROM Student 
GROUP BY StuName, ClassName; 
相關問題