mysql 怎么统计每天某个字段之和?

2019-06-21 11:55:40 +08:00
 KigKrazy

类似有一个表

字段如下:

name(销售名) b(int,类似销售金额)  time(datetime,时间戳)

需要的查询结果

name   total(销售总额,当天所以 B 字段加起来的和)   日期( yy-MM-dd )

各位有什么资料连接,或者提示的? 给个文章自己研究,目前百度下几个方案好像不是很好。

5650 次点击
所在节点    程序员
27 条回复
jorneyr
2019-06-21 12:00:10 +08:00
可以参考一下: select date(created_at), count(1) from user group by date(created_at)
Maboroshii
2019-06-21 12:08:27 +08:00
select from_unixtime(time, '%Y-%m-%d) as date, name, sum(b) from t group by date, name, order by date
Mac
2019-06-21 14:55:21 +08:00
group by
Raymon111111
2019-06-21 14:58:21 +08:00
插入的时候实时计算, 扔到缓存里

然后每天再把缓存里的数落地

容错性强一点可以每小时或者半小时搞一次, 要是挂了只用再 count 当前小时的数据即可

强行用 sql 去搞这个不是给自己制造麻烦吗
neoblackcap
2019-06-21 14:59:10 +08:00
一般的做法都是另外建一张汇总表,第二天统计昨天的结果,将结果汇总。
这个汇总的过程就不限于 SQL,你写一个定时程序就可以了
wqzjk393
2019-06-21 15:07:50 +08:00
先套一层子查询,把时间戳转成你要的那个 yymmdd 格式,然后 select name,sum(b),time_format from 子查询 group by(name,time_format)
cpdyj0
2019-06-21 15:14:58 +08:00
用 SQL 搞可能会降低性能哦
zarte
2019-06-21 15:35:54 +08:00
select sum ( b ) as total,name where time< and time>= group by name
KigKrazy
2019-06-21 15:39:15 +08:00
谢谢大家的回复 @!!!!
另外问下大家都是怎么做的,我在创建比如订单的时候加上一个日期可以吗?


大家生产环境都是怎么个操作手法呢
Beeethoven
2019-06-21 15:44:55 +08:00
要是我的话 新建一张表 然后在服务器跑段定时代码,每天固定时间统计 timestamp 在今天内的所有行,运算完毕后存到新表里。只用 SQL 不仅麻烦而且脱离实际啊
KigKrazy
2019-06-21 15:46:42 +08:00
@neoblackcap
@Raymon111111
这样子不就不能比较实时的查看数据了?总感觉不好
KigKrazy
2019-06-21 15:46:59 +08:00
@cpdyj0
你们生产环境是什么方案
Ritr
2019-06-21 15:51:12 +08:00
@neoblackcap 嗯说的对,定时汇总到一张汇总表里即可。简单有效查询还快
Ritr
2019-06-21 15:53:22 +08:00
@KigKrazy 要看实时数据,可以结合汇总表的数据+当前数据进行计算。比如汇总表的数据是 2019-6-1 到 2019-6-20 的数据,而 2019-6-21 的数据重新查出来即可。
Ritr
2019-06-21 15:54:02 +08:00
@Ritr 如果要查询 2019-6-1 到 2019-6-21,结合两者的数据就行了
zisway
2019-06-21 16:00:45 +08:00
历史统计数据加今日统计数据,定时任务统计好历史数据就可以了
l1203
2019-06-21 16:17:07 +08:00
只有 sqlserver 的实现,我创建了一个数据库试了下,能按要求查出来。
select Name,SUM(Money) as Total,CONVERT(VARCHAR(10),CreateTime,120) AS Dates from Test group by Name,CONVERT(VARCHAR(10),CreateTime,120)
ahjiangwu
2019-06-21 16:25:19 +08:00
#17 楼的方法可行
只是对于数据量的情况,几乎很难实现

#4 楼给了分治的方法可以参考

我遇到的情况用的与 #5 类似的方法,只是把数据拆的更细,冗余了日期和小时字段
neoblackcap
2019-06-21 16:49:58 +08:00
不说数据量,单单最求实时是不现实的。你一秒几十个订单,你的实时也不准啊。
你每分钟读从库汇总一次,实时性也不差啊。
如果要真正既实时又准确,怕是需要大改造你们现有的系统。所以这样的需求,用最简单的方法解决就可以了。
单独的一个定时任务,谁来维护都很容易,出错的可能性也不大。
Raymon111111
2019-06-21 16:55:09 +08:00
@KigKrazy 啥? 实时数据缓存里有啊

更具体的做法是, 数据库里来了一条记录 insert 完, 立马缓存去加.

这个时候缓存里的总和和数据库里是完全一致的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/576143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX