簡體   English   中英

列的總和並插入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM