› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
treedon
V2EX  ›  MySQL

统计某个用户的每日订单总额

  •  
  •   treedon · Sep 20, 2017 · 8654 views
    This topic created in 3341 days ago, the information mentioned may be changed or developed.
    材料:user 表 and order 表(order 表有下单日期,订单金额)
    需求 : 统计某用户 指定的日期范围内 [每日] 订单总额

    其实功能已经实现,用循环写出来了. 但是用循环去泡 sql 是很低端的做法

    故到这里寻求更好的思路。
    32 replies  •  2018-01-19 15:17:25 +08:00
    treedon
    treedon
    OP
    Sep 20, 2017
    1
    有 8 个人查看了,都没回复
    是我的问题太 low 了嘛?
    sonyxperia
    sonyxperia
    Sep 20, 2017
    2
    需要用到两张表关联查询吗?
    mxm145
    mxm145
    Sep 20, 2017
    3
    如果是每天都需要的数据,是不是应该专门建表存储,每次订单完成去更新一次
    huijiewei
    huijiewei
    Sep 20, 2017
    4
    SELECT SUM(amount) FROM order GROUP BY userId

    用 GROUP BY
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 20, 2017
    5
    lwldcr
    lwldcr
    Sep 20, 2017
    6
    join 吧
    treedon
    treedon
    OP
    Sep 20, 2017
    7
    @mxm145 我也想这么干,但是别人不愿意。只好我来统计了
    treedon
    treedon
    OP
    Sep 20, 2017
    8
    @sonyxperia 不用关联的 order 表有 user_id 有下单时间 有订单价格
    treedon
    treedon
    OP
    Sep 20, 2017
    9
    @liprais 非常感谢,我去看看
    treedon
    treedon
    OP
    Sep 20, 2017
    10
    @huijiewei 我在看 5 楼 提供的文章也是用 group by
    b821025551b
    b821025551b
    Sep 20, 2017
    11
    你没有指出的关键点是,user 表和 order 表是如何进行关联的。
    treedon
    treedon
    OP
    Sep 20, 2017
    12
    @b821025551b 因为不是特别重点吧
    torbrowserbridge
    torbrowserbridge
    Sep 20, 2017 via Android
    13
    数据量小直接 sql 查询,数据量大可以离线统计,甚至上流式数据处理
    treedon
    treedon
    OP
    Sep 20, 2017
    14
    @b821025551b user 表的 id 关联 order 表的 user_id
    b821025551b
    b821025551b
    Sep 20, 2017
    15
    @treedon #14 那不就是 4 楼的 group by user_id 么
    treedon
    treedon
    OP
    Sep 20, 2017
    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
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 20, 2017
    17
    @treedon 贴数据
    treedon
    treedon
    OP
    Sep 20, 2017
    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
    b821025551b
    b821025551b
    Sep 20, 2017
    19
    使用 FROM_UNIXTIME 这个函数前先查查是怎么用的好伐,这里你可以用 DATE_FORMAT(create_time,'%y%m%d')
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 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)
    treedon
    treedon
    OP
    Sep 20, 2017
    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
    goddoger
    goddoger
    Sep 20, 2017
    22
    SELECT SUM(jine) as 总金额 ,username from `order` WHERE addtime='2017-09-10' GROUP BY username
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 20, 2017❤️1
    23
    @treedon
    from_unixtime('create_time') AS day_day
    这个地方是单引号?去掉试试
    oongxx
    oongxx
    Sep 20, 2017
    24
    select sum(amount) ... group by userid, orderdate
    Cabana
    Cabana
    Sep 20, 2017 via Android
    25
    这种事情不是数据库视图干的活吗?直接 SQL 联表查呗
    wyk52012
    wyk52012
    Sep 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;

    > 指定时间查询区间
    > 指定用户
    > 按照日期切割
    > 获取单个用户某个日期段内每日的订单额
    yuan93
    yuan93
    Sep 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');
    treedon
    treedon
    OP
    Sep 21, 2017
    28
    @liprais 可以了...from_unixtime(create_time)
    括号里面不能加那个引号,估计当成字符串了,没当成字段名
    昨天想回复您的,但是 v2 站说我回复太频繁, 禁了我回复 t t
    现在应该可以回复了
    treedon
    treedon
    OP
    Sep 22, 2017
    29
    @liprais 您还在吗
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 22, 2017
    30
    @treedon 有问题直接问,别人看到也会帮助你的
    treedon
    treedon
    OP
    Sep 25, 2017
    31
    @liprais 哈哈 都解决了
    guojxx
    guojxx
    Jan 19, 2018
    32
    那你可能需要 sql 中有一个 叫做标量函数 month() year()之类的 直接统计
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3590 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 09:55 · PVG 17:55 · LAX 01:55 · JFK 04:55
    ♥ Do have faith in what you're doing.