mysql 时间格式 累加统计

本文介绍如何使用SQL对时间进行处理、统计并实现累加操作,包括日期格式转换、group by 处理及使用子查询解决叠加问题。

表结构是这样子的

需求要的结果是这样子的

有三步操作,首先对时间进行处理 然后对时间进行统计,最后再累加

首先对时间进行处理

用到了DATE_FORMAT(login_time,'%Y-%c-%d') 这个函数 把时间格式整理 去掉时分秒

这个可以把计算的结果进行group by 处理 当然也可以吧查到的数据进行格式化处理

就得到了这个结果


这个还不是想要的

接下来就得到了 最难的部分叠加

如果是orcal 据说可以用到over()这个函数 但是mysql就是没有。所以就只好用子查询了

这句话 最重要的一点就是在where 这个地方

MySQL 中实现分组累加有多种方法,以下为你详细介绍: #### 子查询实现分组累加 使用子查询可实现分组累加,示例代码如下: ```sql select empno, deptno, sal, (select sum(sal) from emp where deptno = e.deptno and empno <= e.empno ) as g_sum from emp as e order by deptno, empno; ``` 此代码从 `emp` 表中查询 `empno`、`deptno`、`sal` 字段,并使用子查询计算每个部门内从开始到当前员工的工资累计和,将结果存储在 `g_sum` 字段中,最后按部门和员工编号排序[^2]。 #### 用户变量实现分组累加 用户变量实现分组累加也是一种常见方法,示例如下: ```sql SELECT @total_num := 0; SELECT temp.*, @total_num := @total_num + temp.some_column AS cumulative_sum FROM (SELECT * FROM your_table ORDER BY group_column, order_column) AS temp; ``` 这里先初始化一个用户变量 `@total_num` 为 0,然后从子查询 `temp` 中取出数据,按分组列和排序列排序,在主查询中对 `some_column` 进行累加操作,将结果存储在 `cumulative_sum` 字段中。用户变量这种实现方式适用于全表累加统计[^5]。 #### 分组聚合后累加 若要对分组聚合后的数据进行累加,可先按分组条件聚合数据,再进行累加,示例如下: ```sql -- 先按照日期分组聚合求总 SELECT finish_time, SUM(watch_time) as watch_time FROM live_results WHERE company_id = 2703 GROUP BY DATE_FORMAT(finish_time, '%Y-%m-%d'); ``` 此代码从 `live_results` 表中筛选出 `company_id` 为 2703 的数据,按日期分组,计算每天的总观看时长,后续可在此基础上进一步实现累加操作[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值