Mysql 同一列上的多个计数并插入到另一个表中

Mysql 同一列上的多个计数并插入到另一个表中,mysql,sql,pivot,Mysql,Sql,Pivot,我有一个有三列的学生表 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) 我用 获取每个stu+课程组合的通过科目数。同样,

我有一个有三列的学生表

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)
我用

获取每个stu+课程组合的通过科目数。同样,对于失败和缺席的测试

我应该如何修改代码以插入表2???

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)
如果要插入上述查询的结果,请使用
insert-INTO..SELECT
statement

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)
您可以使用带有
大小写的聚合函数轻松地透视数据:

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

美好的非常简短的解决方案。我不知道可以对布尔值求和。美好的