我这里的情况很特殊。我很抱歉这个问题太天真或不清楚。
我有一个表(称为 Table1),如下所示:
Student First Name | Last name | ID | Test Name | Result
Anthony | Davis | 12353 | abc_1_1 | Pass
Chris | Tucker | 23412 | abc_1_3 | Fail
Anthony | Davis | 12355 | abc_2_4 | Fail
Anthony | Davis | 12356 | abc_2_1 | Pass
Anthony | Davis | 12635 | abc_1-5 | Fail
Anthony | Davis | 12375 | abc_2_3 | Pass
Anthony | Davis | 12935 | abc_1_8 | Fail
Chris | Tucker | 23341 | abc_1_2 | Pass
Chris | Tucker | 23541 | abc_2_3 | Pass
Chris | Tucker | 23431 | abc_1_4 | Fail
Chris | Tucker | 21341 | abc_2_1 | Pass
Chris | Tucker | 32341 | abc_1_6 | Fail
David | Steel | 34352 | abc_2_3 | Fail
David | Steel | 34352 | abc_1_2 | Pass
David | Steel | 34352 | abc_2_4 | Fail
David | Steel | 34352 | abc_1_1 | Pass
David | Steel | 34352 | abc_1_7 | Fail
我想要实现的表(table2)是这样的:
Name | Test Type | Pass | Fail
AnthonyDavis | Type_1 | 1 | 2
AnthonyDavis | Type_2 | 2 | 1
ChrisTucker | Type_1 | 1 | 2
ChrisTucker | Type_1 | 1 | 2
DavidSteel | Type_1 | 2 | 1
DavidSteel | Type_1 | 0 | 1
有没有可能实现这个是SQL?
Table2 的主键是(名称,测试类型)
还是让临时表收集所需数据然后将其传输到 Table2 更容易?
最佳答案
假设 TestType
值基于 TestName
的前五个字符,那么您应该能够使用类似于此的方法来选择数据:
-- insert into Table2 (name, TestType, Pass, Fail)
select concat(StudentFirstName, Lastname) name,
case left(TestName, 5)
when 'abc_1' then 'Type_1'
when 'abc_2' then 'Type_2'
end testtype,
sum(case when result = 'Pass' then 1 else 0 end) Pass,
sum(case when result = 'Fail' then 1 else 0 end) Fail
from Table1
group by concat(StudentFirstName, Lastname),
case left(TestName, 5)
when 'abc_1' then 'Type_1'
when 'abc_2' then 'Type_2'
end;
参见 SQL Fiddle with Demo .获得所需格式的数据后,您可以轻松地将其插入 Table2
。
如果我关于您如何获得 TestType
的假设不正确,请提供有关您如何确定这一点的详细信息。
注意,MySQL 允许在 GROUP BY 中使用来自 SELECT 的别名:
-- insert into Table2 (name, TestType, Pass, Fail)
select concat(StudentFirstName, Lastname) name,
case left(TestName, 5)
when 'abc_1' then 'Type_1'
when 'abc_2' then 'Type_2'
end testtype,
sum(case when result = 'Pass' then 1 else 0 end) Pass,
sum(case when result = 'Fail' then 1 else 0 end) Fail
from Table1
group by name, testtype;
关于mysql - 列的组总和并插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464701/