如何创建一个在一列中提供总和的查询,以及在另一列中依赖于查询的小计?
给出下表
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的总和以及status = 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 |
-> +------+----------+----------------------------------------------------+
...提供错误的结果,当然。它给出了第3列中所有A的总和。
我希望:
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 :(得分:0)
您可以使用条件聚合:
select a, sum(num),
sum(case when status = 'Y' then num else 0 end)
from t
group by a;
答案 1 :(得分:0)
SELECT A, SUM(num), SUM( IF( status='Y', num, 0 ) )
FROM test
GROUP BY A
答案 2 :(得分: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`;
您也可以使用此技术获取计数,平均值等。