2017-07-13 5 views
0

合計の合計を1つの列に、小計は別のクエリに依存するクエリを作成するにはどうすればよいですか?同じ出力にtotalsumとサブクエリ合計を提供するための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) 

を考える:によってグループ化します。 numとステータス= Y.

このNUMの総和の合計:

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 | 
-> +------+----------+----------------------------------------------------+ 

...オフコース、誤った結果を提供します。

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
をそれは私が好きだろうコラム3.

内のすべてのAの合計を与えます

お試しください:

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 
関連する問題