材料:user 表 and order 表(order 表有下单日期,订单金额)
需求 : 统计某用户 指定的日期范围内 [每日] 订单总额
其实功能已经实现,用循环写出来了. 但是用循环去泡 sql 是很低端的做法
故到这里寻求更好的思路。
需求 : 统计某用户 指定的日期范围内 [每日] 订单总额
其实功能已经实现,用循环写出来了. 但是用循环去泡 sql 是很低端的做法
故到这里寻求更好的思路。
|
1
有 8 个人查看了,都没回复
是我的问题太 low 了嘛? |
|
sonyxperiaSep 20, 2017
2
需要用到两张表关联查询吗?
|
|
mxm145Sep 20, 2017
3
如果是每天都需要的数据,是不是应该专门建表存储,每次订单完成去更新一次
|
|
huijieweiSep 20, 2017
4
SELECT SUM(amount) FROM order GROUP BY userId
用 GROUP BY |
|
F281M6Dh8DXpD1g2Sep 20, 2017
5
|
|
lwldcrSep 20, 2017
6
join 吧
|
|
8
@sonyxperia 不用关联的 order 表有 user_id 有下单时间 有订单价格
|
|
b821025551bSep 20, 2017
11
你没有指出的关键点是,user 表和 order 表是如何进行关联的。
|
|
12
@b821025551b 因为不是特别重点吧
|
|
torbrowserbridgeSep 20, 2017 via Android
13
数据量小直接 sql 查询,数据量大可以离线统计,甚至上流式数据处理
|
|
14
@b821025551b user 表的 id 关联 order 表的 user_id
|
|
b821025551bSep 20, 2017
15
@treedon #14 那不就是 4 楼的 group by user_id 么
|
|
16
@liprais SELECT
FROM_UNIXTIME('create_time')AS day_day, sum(total_price) AS day_sum FROM order WHERE user_id = 100 GROUP BY FROM_UNIXTIME('create_time'); 我的 create_time 存的是时间戳 但是输出是 1970 |
|
F281M6Dh8DXpD1g2Sep 20, 2017
17
@treedon 贴数据
|
|
18
@liprais 这里不能截图 好憋屈
order 表的数据是 user_id create_time total_price 100 1505871005(2017-09-20) 10 100 1505810684(19) 20 100 1505724284(18) 30 输出的就是 day_day day_sum 1970-01-01 08:00:00.000000 51.30 |
|
b821025551bSep 20, 2017
19
使用 FROM_UNIXTIME 这个函数前先查查是怎么用的好伐,这里你可以用 DATE_FORMAT(create_time,'%y%m%d')
|
|
F281M6Dh8DXpD1g2Sep 20, 2017
20
@treedon
我这里是没问题的 mysql> select from_unixtime(1505871005); +---------------------------+ | from_unixtime(1505871005) | +---------------------------+ | 2017-09-20 09:30:05 | +---------------------------+ 1 row in set (0.00 sec) |
|
21
@liprais 我单独使用 select from_unixtime(1505871005); 是没问题的
但是写 SELECT from_unixtime('create_time') AS day_day, sum(total_price) AS day_sum FROM zjr_deal_order WHERE user_id = 999999 GROUP BY from_unixtime('create_time'); 执行结果就是 1970-01-01 08:00:00.000000 26.50 |
|
goddogerSep 20, 2017
22
SELECT SUM(jine) as 总金额 ,username from `order` WHERE addtime='2017-09-10' GROUP BY username
|
|
23
|
|
oongxxSep 20, 2017
24
select sum(amount) ... group by userid, orderdate
|
|
CabanaSep 20, 2017 via Android
25
这种事情不是数据库视图干的活吗?直接 SQL 联表查呗
|
|
wyk52012Sep 21, 2017
26
SELECT
DATE(gmt_create_date) AS 'order_create_date', SUM(order_total_amount) AS 'daily_order_amount' FROM t_101_s_021_order WHERE gmt_create_date BETWEEN '2017-08-01' AND '2017-09-20' AND user_id = 'you user id' GROUP BY order_create_date; > 指定时间查询区间 > 指定用户 > 按照日期切割 > 获取单个用户某个日期段内每日的订单额 |
|
yuan93Sep 21, 2017
27
SELECT
date('create_time') AS day_day, sum(total_price) AS day_sum FROM `order` WHERE user_id = 999999 and create_time BETWEEN '2017-08-01' AND '2017-09-20' GROUP BY date('create_time'); |
|
28
@liprais 可以了...from_unixtime(create_time)
括号里面不能加那个引号,估计当成字符串了,没当成字段名 昨天想回复您的,但是 v2 站说我回复太频繁, 禁了我回复 t t 现在应该可以回复了 |
|
F281M6Dh8DXpD1g2Sep 22, 2017
30
@treedon 有问题直接问,别人看到也会帮助你的
|
|
guojxxJan 19, 2018
32
那你可能需要 sql 中有一个 叫做标量函数 month() year()之类的 直接统计
|