V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiaowenxi
V2EX  ›  问与答

遇到一个 mysql 问题,如果解决问题红包 50 元。

  •  
  •   xiaowenxi · 2020-06-06 18:13:58 +08:00 · 2659 次点击
    这是一个创建于 1648 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一张表

    id  good_id  good_value create_time
    1    101      5          2020-06-06 00:38
    2    101      10         2020-06-06 00:38
    3    102      8      	2020-06-05 01:01
    4    102      10         2020-06-06 00:38
    

    现在要求如果 create_time 相同的情况下,并且 good_id 相同的情况下就将 good_value 相加在一起.

    最终查询的 结果应该是:

    id  good_id  good_value create_time
    1    101      15          2020-06-06 00:38
    3    102      8      	2020-06-05 01:01
    4    102      10         2020-06-06 00:38
    

    可以用 sql 查询出来吗?我在网上找了一圈都没找出解决方案来,如果有同好门给出查询语句,直接支付宝 发 50 元红包。

    18 条回复    2020-06-07 08:37:05 +08:00
    ez4hc
        1
    ez4hc  
       2020-06-06 18:23:54 +08:00
    SELECT id,good_id,sum(good_value),create_time FROM good_6_6 GROUP BY good_id,create_time;
    xuuuu
        2
    xuuuu  
       2020-06-06 18:28:59 +08:00
    sum(good_value) groupby create_time,good_id
    zhaohy
        3
    zhaohy  
       2020-06-06 18:47:21 +08:00 via iPhone
    来晚了,哈哈
    lxk11153
        4
    lxk11153  
       2020-06-06 18:50:55 +08:00
    粗活我来,我拿手滴,以后请直接 call cXEvd3g6IDQ0Mzk3NDE1OQ== (b​a​s​e​6​4)
    xiaowenxi
        5
    xiaowenxi  
    OP
       2020-06-06 19:06:49 +08:00
    @ez4hc 稍等,因为我是由其他项目, 项目实际,数据大约有 4 万多条和 7 万多条,等我联查下,看下问题出哪了?可以给我个微信吗?我感觉查出来的数据还是不对,也可能是我描述问题有错误
    noahsophie
        6
    noahsophie  
       2020-06-06 19:09:23 +08:00
    微信:bm9haF9zb3BoaWU= 免费
    miaeLKK
        7
    miaeLKK  
       2020-06-06 19:37:09 +08:00 via Android   ❤️ 1
    我怀疑你是来做慈善的,哈哈
    ez4hc
        8
    ez4hc  
       2020-06-06 20:13:56 +08:00
    @xiaowenxi QW55V2F5XyUyMGhjJTBB
    qiayue
        9
    qiayue  
       2020-06-06 21:04:08 +08:00
    group by 可解决,如果数据不对,你先建一张小表测试下
    lotosbin
        10
    lotosbin  
       2020-06-06 21:08:33 +08:00
    SELECT min(id),good_id,sum(good_value),create_time FROM good_6_6 GROUP BY good_id,create_time;
    Xusually
        11
    Xusually  
       2020-06-06 21:13:47 +08:00
    其实先不说 sql 的事儿,楼主找了这么长时间,其实完全可以程序遍历一遍这个表,跑一遍对比汇总另存一张表就结束了

    结果表还可以用来和单条 sql 对照,不是美滋滋
    fareware
        12
    fareware  
       2020-06-06 22:17:17 +08:00
    这种难度的话...,我愿意做长期 SQL 外包
    DelayNoMay
        13
    DelayNoMay  
       2020-06-06 23:28:14 +08:00
    这种难度也太难了吧
    DelayNoMay
        14
    DelayNoMay  
       2020-06-06 23:30:24 +08:00   ❤️ 1
    @ez4hc 你这条 sql 运行会报错的,多查了一个 id 的字段
    dallaslu
        15
    dallaslu  
       2020-06-06 23:46:06 +08:00
    啊痛失 50 元
    xiaowenxi
        16
    xiaowenxi  
    OP
       2020-06-07 00:56:12 +08:00
    我搞了一天了,还没有弄出来,我还是把原想法说出来把。
    现在有 2 张表,一张是 invoice 表,一张是 charge 表,多对多的关系,我现在需要导出大约 4.5w 条数据,
    我需要获取的数据是:invoice_number/ ctime/account_id/amount/ 这 4 个数据就可以了,总共大约 4.5w 个 invoice_number
    最难的部分 是价格是动态生成的,有其他几个表相加得到的。
    第一张表:
    ```
    id invoice_number date type from_date to_date ctime account_id
    75560 101560 2020-06-01 1 2020-06-01 2020-06-01 2020-06-01 09:59:46 2162
    75686 101686 2020-06-02 1 2020-06-02 2020-06-02 2020-06-02 13:06:02 2162

    ```


    ```
    id shipment_id account_id amount describe ctime type val_type value status
    1350092 69149374 2162 307.03 base rate 2020-06-01 09:59:45 1 2 307.03 0
    1350093 69149374 2162 46.05 markup rate 2020-06-01 09:59:45 1 1 15.00 0
    1350094 69149374 2162 353.08 base and markup rate 2020-06-01 09:59:46 1 2 353.08 1
    1350095 69149374 2162 24.72 Fuel Surcharge 2020-06-01 09:59:46 2 1 7.00 1
    1350096 69149374 2162 5.00 FTZ 2020-06-01 09:59:46 2 2 5.00 1
    1350097 69149374 2162 66.65 Emergency Surcharge 2020-06-01 09:59:46 2 3 4.30 1
    1350098 86932456 2162 45.92 base rate 2020-06-01 09:59:47 1 2 45.92 0
    1350099 86932456 2162 4.59 markup rate 2020-06-01 09:59:47 1 1 10.00 0
    1350100 86932456 2162 50.51 base and markup rate 2020-06-01 09:59:47 1 2 50.51 1
    1351155 35763591 2162 86.00 Other(Out of delivery surcharge) 2020-06-02 13:06:02 3 2 86.00 0 1

    ```

    得到的最终的数据是
    ```
    invoice_number ctime amount
    101560 2020-06-01 09:59:46 2162 499.96 这个 499 的价格是 几单不同 shipment 单 id 下 status 为 1 同一账户 id 2162 ,时间是一定小范围 小于 1 小时 的价格相加得到的 = 353.08 +24.72+5.00+66.65+50.51 =499.96

    101686 2020-06-02 13:06:02 2162 86.00 这个单得到的少。

    ```

    希望我已经描绘清楚了。 因为今天晚上我必须要搞定。
    xiaowenxi
        17
    xiaowenxi  
    OP
       2020-06-07 08:36:30 +08:00
    我擦,我肝了一晚上,我肝出来了,由于查询的时间问题,只能半年半年的查,然后导出到 csv,在这贴下代码

    select a.account_id,a.shipment_id,a.value,b.invoice_number,a.registerTime from(select account_id,shipment_id,sum(account_amount) as value, DATE_FORMAT(ctime,'%Y-%m-%d') as registerTime from w2s_charge_datail where `status` = 1 and ctime BETWEEN '2017-1-1 00:00:00' and '2017-6-1 00:00:00' GROUP BY account_id,registerTime) a LEFT JOIN (select invoice_number,account_id,DATE_FORMAT(ctime,'%Y-%m-%d') as cTime from w2s_invoice where type = '1' and ctime BETWEEN '2017-1-1 00:00:00' and '2017-6-1 00:00:00') b on a.registerTime = b.cTime and a.account_id = b.account_id GROUP BY invoice_number DESC;
    xiaowenxi
        18
    xiaowenxi  
    OP
       2020-06-07 08:37:05 +08:00
    @miaeLKK 应该不简单把。我把最新的情况给弄出来了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5117 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:16 · PVG 15:16 · LAX 23:16 · JFK 02:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.