环境
centos7,postgresql-11,mysql5.7 一般group by后统计数据后,还想算个汇总数,可以使用以下方法
postgres
使用GROUPING SETS ( ( 字段 ), ( ) )函数
SELECT
r.cmd_id,
c.name,
SUM ( r.send_count ) success,
SUM ( r.fail_count ) fail ,
round( 100 * SUM(r.send_count) * 1.0 / ( SUM(r.send_count)+SUM(r.fail_count) ) ) || '%' rate
FROM
run_cmd r left join cfg_cmd c on r.cmd_id=c.id
WHERE
r.gmt_create BETWEEN '2023-7-13 10:00:00'
AND '2023-7-13 13:00:00'
AND ( r.send_count != 0 OR r.fail_count != 0 )
GROUP BY
GROUPING SETS ( ( r.cmd_id,c.name ), ( ) )
ORDER BY fail
mysql
使用WITH ROLLUP函数
SELECT
count( 1 ),
CellId
FROM
`tagreportlog`
WHERE
LocationTime > '2025-01-01'
GROUP BY
CellId WITH ROLLUP