mysql如何分组统计并求出百分比
mysql分组统计并求出百分比
1、mysql 分组统计并列出百分比
SELECT point_id, pname_cn, play_num, round( play_num / total * 100, 2 ) as `ratio` FROM ( SELECT * FROM ( SELECT ANY_VALUE ( `point_id` ) AS point_id, ANY_VALUE ( `pname_cn` ) AS pname_cn, sum( `play` ) AS play_num FROM `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05' GROUP BY `point_id` ) t1 INNER JOIN ( SELECT sum( `play` ) AS total FROM `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05' ) t2 ON 1 = 1 ) t ORDER BY `play_num` DESC LIMIT 0, 10;
--查出符合条件并且分组, 统计出每组数量
SELECT ANY_VALUE ( `point_id` ) AS point_id, ANY_VALUE ( `pname_cn` ) AS pname_cn, sum(`like`) as like_num FROM `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05' GROUP BY `point_id` ) t1
--查出符合条件,总数量
(SELECT sum( `play` ) AS total FROM `dt_collect_antique` WHERE`add_time` BETWEEN '2020-07-02' AND '2020-07-05' ) t2
2、按年龄段分组,并求个年龄段占比
SELECT age_group, age_total, round( age_total / total * 100, 2 ) as `ratio` FROM ( SELECT * FROM ( SELECT SUM(total) AS age_total, CASE WHEN age >= 0 AND age < 18 THEN '18岁以下' WHEN age >= 18 AND age <= 25 THEN '18岁到25岁' WHEN age >= 26 AND age <= 35 THEN '26岁到35岁' WHEN age >= 36 AND age <= 45 THEN '36岁到45岁' WHEN age >= 46 AND age <= 60 THEN '46岁到60岁' ELSE '60岁以上' END AS age_group FROM dt_collect_age WHERE `add_time` BETWEEN ".$time[0]." AND ".$time[1]." GROUP BY age_group ) t1 INNER JOIN ( SELECT SUM( `total` ) AS total FROM `dt_collect_age` WHERE `add_time` BETWEEN ".$time[0]." AND ".$time[1]." ) t2 ON 1 = 1 ) t LIMIT 0, 6;
mysql求百分比的几种方法
函数介绍
1、ROUND(X,D)和ROUND(X)
round函数用于数据的四舍五入,x指要处理的数,d是指保留几位小数
round(x) ,其实就是 round(x,0)

d可以是负数,代表指定小数点左边的d位整数位为0,同时小数位均为0

2、FORMAT(X,D)
提供数据内容格式化功能,可以格式化数据为整数或者浮点数,能四舍五入

D为负数时,按0处理

3、LEFT(str,len)
left函数是一个字符串函数,它返回具有指定长度的字符串的左边部分,str为要处理的字符串,len为长度

left函数为字符串截取,不能四舍五入
4、CONCAT(str1,str2,...)
concat函数用于将多个字符串连接成一个字符串

利用round,format,left与concat求百分比



注意:使用left按位截取百分比时,位数要根据需要合理设置,否则容易出现意外BUG

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MySQL如何设置动态创建时间(create_time)和修改时间(update_time)
本文主要介绍了MySQL如何设置动态创建时间(create_time)和修改时间(update_time),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-05-05
mysql 5.5 开启慢日志slow log的方法(log_slow_queries)
MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在2016-05-05
MYSQL中统计查询结果总行数的便捷方法省去count(*)
查看手册后发现SQL_CALC_FOUND_ROWS关键词的作用是在查询时统计满足过滤条件后的结果的总数(不受 Limit 的限制)具体使用如下,感兴趣的朋友可以学习下2013-07-07
MySQL性能优化之Open_Table配置参数的合理配置建议
这篇文章主要介绍了MySQL性能优化之Open_Table配置参数的合理配置建议,在MySQL数据库中,Opened_tables表示打开过的表数量,需要的朋友可以参考下2014-07-07


最新评论