2017-08-04 29 views
0

的,我想知道是否有發現已經計算派生列的求和放入一個新列的方式。計算總和幾個派生列

Employee_KT_State 
-------------------------------------------------------- 
Emp_Id  Team   KT_State   Left_Org 
---------------------------------------------------------- 
101  Orange   In Progress   2016 
102  Red   Complete    2016 
103  Orange   Complete    N 
104  Green   In Progress   N 
105  Orange   Not Started   N 
106  Green   Not Started   2015 
107  Red   In Progress   N 
108  Red   Complete    N 
109  Green   Complete    N 
----------------------------------------------------------- 

SELECT 
    SUM(if (KT_State = 'In Progress' AND Team = 'Red', 1, 0)) AS 'Red In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Green', 1, 0)) AS 'Green In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Orange', 1, 0)) AS 'Orange In Progress Count' 
    SUM(if (KT_State = 'Complete' AND Team = 'Green', 1, 0)) AS 'Green Complete Count' 
    FROM 
     Employee_KT_State 

我試圖添加綠色進行中和完成計數。我可以直接使用從第二和第四列派生的計數,而不是具有不同條件的另一個SUM?

something like - 

    SELECT 
    SUM(if (KT_State = 'In Progress' AND Team = 'Red', 1, 0)) AS 'Red In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Green', 1, 0)) AS 'Green In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Orange', 1, 0)) AS 'Orange In Progress Count' 
    SUM(if (KT_State = 'Complete' AND Team = 'Green', 1, 0)) AS 'Green Complete Count', 
    'Green In Progress Count' + 'Green Complete Count' AS ' Green In-Progress and Complete Count' --> Will this yield me results?? 
    FROM 
     Employee_KT_State 

任何幫助表示讚賞。

+0

不,你不能在定義它的'select'使用列別名。 –

+0

好吧,那麼你是否推薦我使用第一個查詢作爲子查詢和實際查詢來計算各個列的總和? –

+0

無論哪種方式的優良 – Strawberry

回答

2

在MySQL中,您可以簡化代碼:

SELECT SUM(KT_State = 'In Progress' AND Team = 'Red') AS `Red In Progress Count`, 
     SUM(KT_State = 'In Progress' AND Team = 'Green') AS `Green In Progress Count`, 
     SUM(KT_State = 'In Progress' AND Team = 'Orange') AS `Orange In Progress Count`, 
     SUM(KT_State = 'Complete' AND Team = 'Green') AS `Green Complete Count`, 
FROM Employee_KT_State; 

爲了讓您的兩個附加列,你需要明確有SUM()表達。

注意,我改變了列名使用反引號的列別名。只對字符串和日期常量使用單引號。

+0

感謝您的答覆戈登。不幸的是,我需要按照問題中所述的綠色進行和綠色完成計數。 –

+0

@SrinivasLakshman。 。 。你似乎知道如何做這個計算。你不能使用捷徑。 –

0

使用子查詢

SELECT t.*, 
     `Green In Progress Count` + `Green Complete Count` 
      As ` Green In-Progress and Complete Count` 
FROM (
    SELECT 
    SUM(if (KT_State = 'In Progress' AND Team = 'Red', 1, 0)) AS `Red In Progress Count`, 
    SUM(if (KT_State = 'In Progress' AND Team = 'Green', 1, 0)) AS `'Green In Progress Count`, 
    SUM(if (KT_State = 'In Progress' AND Team = 'Orange', 1, 0)) AS `Orange In Progress Count` 
    SUM(if (KT_State = 'Complete' AND Team = 'Green', 1, 0)) AS `Green Complete Count` 
    FROM 
     Employee_KT_State 
) t 

簡化的演示:http://sqlfiddle.com/#!9/b7ddd8c/2

SELECT t.*, 
     `Green In Progress Count` + `Green Complete Count` 
      As ` Green In-Progress and Complete Count` 
FROM (
    SELECT x As `Green In Progress Count`, 
      2* x As `Green Complete Count` 
    FROM Employee_KT_State 
) t 

| Green In Progress Count | Green Complete Count | Green In-Progress and Complete Count | 
|-------------------------|----------------------|--------------------------------------| 
|      1 |     2 |         3 | 
|      2 |     4 |         6 | 
|      3 |     6 |         9 | 
+0

謝謝!我也會這樣做! –