V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
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 · 7957 views
    This topic created in 3148 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
        1
    treedon  
    OP
       Sep 20, 2017
    有 8 个人查看了,都没回复
    是我的问题太 low 了嘛?
    sonyxperia
        2
    sonyxperia  
       Sep 20, 2017
    需要用到两张表关联查询吗?
    mxm145
        3
    mxm145  
       Sep 20, 2017
    如果是每天都需要的数据,是不是应该专门建表存储,每次订单完成去更新一次
    huijiewei
        4
    huijiewei  
       Sep 20, 2017
    SELECT SUM(amount) FROM order GROUP BY userId

    用 GROUP BY
    F281M6Dh8DXpD1g2
        5
    F281M6Dh8DXpD1g2  
       Sep 20, 2017
    lwldcr
        6
    lwldcr  
       Sep 20, 2017
    join 吧
    treedon
        7
    treedon  
    OP
       Sep 20, 2017
    @mxm145 我也想这么干,但是别人不愿意。只好我来统计了
    treedon
        8
    treedon  
    OP
       Sep 20, 2017
    @sonyxperia 不用关联的 order 表有 user_id 有下单时间 有订单价格
    treedon
        9
    treedon  
    OP
       Sep 20, 2017
    @liprais 非常感谢,我去看看
    treedon
        10
    treedon  
    OP
       Sep 20, 2017
    @huijiewei 我在看 5 楼 提供的文章也是用 group by
    b821025551b
        11
    b821025551b  
       Sep 20, 2017
    你没有指出的关键点是,user 表和 order 表是如何进行关联的。
    treedon
        12
    treedon  
    OP
       Sep 20, 2017
    @b821025551b 因为不是特别重点吧
    torbrowserbridge
        13
    torbrowserbridge  
       Sep 20, 2017 via Android
    数据量小直接 sql 查询,数据量大可以离线统计,甚至上流式数据处理
    treedon
        14
    treedon  
    OP
       Sep 20, 2017
    @b821025551b user 表的 id 关联 order 表的 user_id
    b821025551b
        15
    b821025551b  
       Sep 20, 2017
    @treedon #14 那不就是 4 楼的 group by user_id 么
    treedon
        16
    treedon  
    OP
       Sep 20, 2017
    @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
        17
    F281M6Dh8DXpD1g2  
       Sep 20, 2017
    @treedon 贴数据
    treedon
        18
    treedon  
    OP
       Sep 20, 2017
    @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
        19
    b821025551b  
       Sep 20, 2017
    使用 FROM_UNIXTIME 这个函数前先查查是怎么用的好伐,这里你可以用 DATE_FORMAT(create_time,'%y%m%d')
    F281M6Dh8DXpD1g2
        20
    F281M6Dh8DXpD1g2  
       Sep 20, 2017
    @treedon

    我这里是没问题的
    mysql> select from_unixtime(1505871005);
    +---------------------------+
    | from_unixtime(1505871005) |
    +---------------------------+
    | 2017-09-20 09:30:05 |
    +---------------------------+
    1 row in set (0.00 sec)
    treedon
        21
    treedon  
    OP
       Sep 20, 2017
    @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
        22
    goddoger  
       Sep 20, 2017
    SELECT SUM(jine) as 总金额 ,username from `order` WHERE addtime='2017-09-10' GROUP BY username
    F281M6Dh8DXpD1g2
        23
    F281M6Dh8DXpD1g2  
       Sep 20, 2017   ❤️ 1
    @treedon
    from_unixtime('create_time') AS day_day
    这个地方是单引号?去掉试试
    oongxx
        24
    oongxx  
       Sep 20, 2017
    select sum(amount) ... group by userid, orderdate
    Cabana
        25
    Cabana  
       Sep 20, 2017 via Android
    这种事情不是数据库视图干的活吗?直接 SQL 联表查呗
    wyk52012
        26
    wyk52012  
       Sep 21, 2017
    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
        27
    yuan93  
       Sep 21, 2017
    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
        28
    treedon  
    OP
       Sep 21, 2017
    @liprais 可以了...from_unixtime(create_time)
    括号里面不能加那个引号,估计当成字符串了,没当成字段名
    昨天想回复您的,但是 v2 站说我回复太频繁, 禁了我回复 t t
    现在应该可以回复了
    treedon
        29
    treedon  
    OP
       Sep 22, 2017
    @liprais 您还在吗
    F281M6Dh8DXpD1g2
        30
    F281M6Dh8DXpD1g2  
       Sep 22, 2017
    @treedon 有问题直接问,别人看到也会帮助你的
    treedon
        31
    treedon  
    OP
       Sep 25, 2017
    @liprais 哈哈 都解决了
    guojxx
        32
    guojxx  
       Jan 19, 2018
    那你可能需要 sql 中有一个 叫做标量函数 month() year()之类的 直接统计
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   770 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.