之前博文中写过一篇
《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) numberFROM`user_tasks`GROUP BY`status`) t1INNER JOIN(SELECTCOUNT(1) totalFROM`user_tasks`) t2 ON 1 = 1
基本这种操作可以应对大部分的占比求值, 但是当使用时间进行分组求占比的时候就需要注意了
例如下面的例子
创建数据库并插入数据
CREATE TABLE `order` (`order_id` int(11) NOT NULL,`order_time` datetime DEFAULT NU