mysql分组后占比、累计占比和排序统计各年龄段人数

原文链接:https://blog.csdn.net/weixin_41233157/article/details/122962747

https://blog.51cto.com/u_15152248/2680714?abTest=51cto

1.求group by之后和的占比
先做group by分组汇总,再单独inner join连接到和,最后分组结果除以连接到的和

select
ifnull(hour_diff,'--合计--') hour_diff,count(1) cnt,count(1)/tot pct
from
(select timestampdiff(hour,createtime,activate_time) hour_diff from t_consumer) w
inner join
(select count(1) tot from t_consumer) c
group by
hour_diff
with rollup;
1
2
3
4
5
6
7
8
9

2.求group by之后和的累计占比
先求group by之后和的占比,再利用@s参数对占比进行累加

set @s=0;
select *,@s:=@s+pct cul_pct
from
(select
ifnull(hour_diff,'--合计--') hour_diff,count(1) cnt,count(1)/tot pct
from
(select timestampdiff(hour,createtime,activate_time) hour_diff from t_consumer) w
inner join
(select count(1) tot from t_consumer) c
group by hour_diff
with rollup
) wc;
1
2
3
4
5
6
7
8
9
10
11
12

3.对每行数据进行排序
对每行数据利用@rank参数从1开始累加即可排序

set @s=0;
set @rank=0;
select *,@s:=@s+pct cul_pct,@rank:=@rank+1 rank
from
(select
ifnull(hour_diff,'--合计--') hour_diff,count(1) cnt,count(1)/tot pct
from
(select timestampdiff(hour,createtime,activate_time) hour_diff from t_consumer) w
inner join
(select count(1) tot from t_consumer) c
group by
hour_diff
with rollup) wc;
1
2
3
4
5
6
7
8
9
10
11
12
13

以表结构字段为id,birthday为例统计各年龄段人数:

 

SELECT
z.age AS NAME,
count( z.age ) AS 
VALUE
FROM
(
SELECT
CASE WHEN p.age < 12 THEN '0~12' 
WHEN p.age < 18 THEN '13~18' 
WHEN p.age <= 30 THEN '19~30' 
WHEN p.age <= 50 THEN'31~50' 
ELSE '50+' 
END AS age 
FROM
(SELECT extract( YEAR FROM CURDATE( ) ) - IFNULL( FROM_UNIXTIME( IFNULL( birthday, 0 ), '%Y-%m-%d' ), CURDATE( ) ) AS age 
FROM at_b ) p 
) z 
GROUP BY
z.age
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
执行结果如下:

 

posted @   枫树湾河桥  阅读(1353)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2018-09-07 IntelliJ IDEA 常用设置 (二)
2018-09-07 IntelliJ IDEA常用设置(一)
2018-09-07 IntelliJ IDEA 配置Maven
Live2D
欢迎阅读『mysql分组后占比、累计占比和排序统计各年龄段人数』
西雅图
14:14发布
西雅图
14:14发布
6°
多云
东北风
1级
空气质量
相对湿度
91%
今天
中雨
5°/9°
周三
3°/12°
周四
5°/10°
点击右上角即可分享
微信分享提示