[英]Group sum of a column and insert
我在這里有一個獨特的情況。 我很抱歉這個問題太幼稚或不清楚。
我有一個表(稱為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? primary key for Table2 is (Name,Test Type)
的primary key for Table2 is (Name,Test Type)
還是讓臨時表收集所需的數據然后將其傳輸到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 。 獲得所需格式的數據后,可以輕松地將其插入Table2
。
如果我對您如何獲得TestType
假設不正確,請提供有關如何確定此類型的詳細信息。
注意,MySQL允許SELECT的別名在GROUP BY中使用:
-- 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.