之前博文中写过一篇
《SQL实现占比、同比、环比指标分析》
其中列举了mysql和oracle实现占比的两种方式,分别使用on1=1和cross join 实现笛卡尔积。
基本语法如下
SELECT
`status`,
number,
concat(round(number / total * 100.00, 2), '%') percent
FROM
(
SELECT
*
FROM
(
SELECT
`status`,
COUNT(1) number
FROM
`user_tasks`
GROUP BY
`status`
) t1
INNER JOIN(
SELECT
COUNT(1) total
FROM
`user_tasks`
) t2 ON 1 = 1
基本这种操作可以应对大部分的占比求值, 但是当使用时间进行分组求占比