mysql 执行时间饼图_通过生日查询各年龄段数量通过饼状图显示

本文介绍如何使用MySQL查询数据库表中各年龄段的数量,并将结果通过Echarts饼图进行可视化展示。重点在于构造一个SQL查询,通过TIMESTAMPDIFF函数计算年龄,然后使用CASE语句划分年龄段,最后在Controller层处理数据并返回给前端Vue应用进行展示。
摘要由CSDN通过智能技术生成

64a4cb262352d672082def34427945d9.png

数据库表t_member中 birthday 字段为date类型

需求:根据年龄段(可以指定几个年龄段,例如0-18、18-30、30-45、45以上)展示各个年龄段的占比,通过饼形图来展示(Echarts)

实现:最重要的就是sql语句:

SELECT (CASE

WHEN a.age IS NULL THEN 'unknown'

WHEN a.age < 18 THEN '0-18岁' #then后面的为前端显示数据,也就是Echarts显示数据

WHEN a.age BETWEEN 18 AND 30 THEN '18-30岁'

WHEN a.age BETWEEN 31 AND 45 THEN '30-45岁'

WHEN a.age > 45 THEN '45岁以上'

END) as name,

COUNT(*) 'value' #name和value需要这样写,和Controller层数据对应

FROM (SELECT NOW() AS "时间",birthday,TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age FROM t_member )a

GROUP BY name

Controller层,service,dao以及dao.xml中的方法都是:findMemberAgeCount

Controller层如下()其它层非常简单,省略)

@RequestMapping("/getMemberAgeReport")

public Result getMemberAgeReport(){

try {

List> list = memberService.findMemberAgeCount();

Map map = new HashMap<>();

map.put("ageCount",list);

List memberAge = new ArrayList<>();

for (Map maplist : list) {

String name = (String) maplist.get("name");

memberAge.add(name);

}

map.put("memberAge",memberAge);

return new Result(true,MessageConstant.GET_MEMBERAGE_COUNT_REPORT_SUCCESS,map);

}catch (Exception e){

e.printStackTrace();

return new Result(false,MessageConstant.GET_MEMBERAGE_COUNT_REPORT_FAIL);

}

}

注意细节:前端使用vue:

ajax请求: axios.get("/report/getMemberAgeReport.do")

封装是数据:通过分析得出需要封装成 List>

legend: {

orient: 'vertical',

left: 'left',

data: res.data.data.memberAge

},

series : [

{

name: '会员年龄占比',

type: 'pie',

radius : '55%',

center: ['50%', '60%'],

data:res.data.data.ageCount,

itemStyle: {

emphasis: {

shadowBlur: 10,

shadowOffsetX: 0,

shadowColor: 'rgba(0, 0, 0, 0.5)'

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值