2013-03-01 4 views
0

에 삽입 나는 세 개의 열여러 동일한 열에서 수와 다른 테이블

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

학생은 다른 결과 더 이상의 테스트를 필요가있는 학생 테이블이 있습니다. 나는 각 스투 + 클래스 조합에 대한 주제 전달의 수를 얻을 수

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

를 사용

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

을 가진 다른 테이블에 데이터를 얻기 위해 노력하고 있어요. 실패한 테스트와 부재 한 테스트의 경우도 마찬가지입니다.

표 2에 삽입하려면 코드를 어떻게 수정해야합니까 ??

답변

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

+0

SUM 부울 값을 사용할 수 있는지 알지 못했습니다. 좋은. –

2

할 수 있습니다 쉽게 피벗를 위의 쿼리의 결과를 삽입 INSERT INTO..SELECT 문을 사용하고자 할 때 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. :) –

+0

@KumaranSenapathy 환영합니다! :) – Taryn

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; 
관련 문제