2017-07-13 49 views
0

如何創建一個查詢,該查詢在一列中提供總和,而小計依賴於另一列中的查詢?Mysql查詢在同一輸出中提供總計和子查詢總數

如下表

mysql> +------+------+------+--------+ 
-> | A | B | num | status | 
-> +------+------+------+--------+ 
-> | e | f | 34 | Y  | 
-> | e | f | 45 | Y  | 
-> | g | h | 22 | N  | 
-> | a | f | 55 | Y  | 
-> | d | g | 66 | N  | 
-> | e | f | 67 | Y  | 
-> | a | f | 88 | Y  | 
-> | e | g | 36 | N  | 
-> | d | g | 44 | N  | 
-> | a | h | 33 | Y  | 
-> | a | g | 33 | N  | 
-> | e | x | 343 | Y  | 
-> | a | a | 33 | N  | 
-> +------+------+------+--------+ 
-> 13 rows in set (0.00 sec) 

我想輸出的表中顯示:由A進行分組; NUM的總和和num的總和,其中狀態= Y.

此:

select A, sum(num), 
     (select sum(num) from test where (status = 'Y')) 
from test 
group by A; 

mysql> +------+----------+----------------------------------------------------+ 
-> | A | sum(num) | (select sum(num) from test where (status = 'Y')) | 
-> +------+----------+----------------------------------------------------+ 
-> | a |  242 |            665 | 
-> | d |  110 |            665 | 
-> | e |  525 |            665 | 
-> | g |  22 |            665 | 
-> +------+----------+----------------------------------------------------+ 

...提供了錯誤的結果,偏離航向。它給所有A的總和列3

我也喜歡:

mysql> +------+----------+----------------------------------------------------+ 
-> | A | sum(num) | (select sum(num) from test where (status = 'Y')) | 
-> +------+----------+----------------------------------------------------+ 
-> | a |  242 |            176 | 
-> | d |  110 |             0 | 
-> | e |  525 |            489 | 
-> | g |  22 |             0 | 
-> +------+----------+----------------------------------------------------+ 

BR AK

回答

0

您可以試試這個:

SELECT 
    `A`, 
    SUM(`num`) as `sum_num`, 
    SUM(IF(`status` = 'Y',`num`,0)) as `sum_status_yes` 
FROM `test` 
GROUP BY `A` 
ORDER BY `A`; 

您也可以使用這種技術來獲得計數,平均值等。

+0

謝謝,這確實有效。 –

+0

很高興爲你效勞。請接受答案 - 謝謝! –

0

可以使用條件彙總:

select a, sum(num), 
     sum(case when status = 'Y' then num else 0 end) 
from t 
group by a; 
0
SELECT A, SUM(num), SUM(IF(status='Y', num, 0)) 
FROM test 
GROUP BY A