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);
美好的非常简短的解决方案。我不知道可以对布尔值求和。美好的