【问题标题】:mysql group results by days with LEFT JOINmysql 使用 LEFT JOIN 按天分组结果
【发布时间】:2016-10-28 22:33:47
【问题描述】:

当有人购买商品时,我有付款表,我添加了 1 条记录,其中包含金额和日期

一些买家需要额外的物品服务(运输支持......) 所以我有服务表,其中包含服务价格和 payment_id

我想要这样的结果

   date    -  Sum(payments)  -  Sum(services)
01-01-2016 -    200          -       100
02-01-2016 -    200          -       100
03-01-2016 -    100          -        0

我试过这个查询

SELECT DATE(FROM_UNIXTIME(date)),SUM(amount),SUM(price) 
FROM payments 
LEFT JOIN services ON payments.id = service.payment_id 
GROUP BY DATE(FROM_UNIXTIME(date))

但返回重复值 提前谢谢

【问题讨论】:

    标签: mysql group-by left-join


    【解决方案1】:

    您需要使用一个子查询来连接这两个表并对每次付款的价格求和。然后您可以按日期对该结果进行分组。

    SELECT date, SUM(payments), SUM(services)
    FROM (
        SELECT DATE(FROM_UNIXTIME(p.date)) AS date, p.amount AS payments, IFNULL(SUM(s.price), 0) AS services
        FROM payments AS p
        LEFT JOIN services AS s ON p.id = s.payment_id
        GROUP BY p.id
    ) AS subquery
    GROUP BY date
    

    【讨论】:

    • 感谢您的帮助,但您的查询中的总价格返回 NULL !!
    • 你能用示例数据制作一个 sqlfiddle,或者用文本替换你的图像,以便我可以将其复制并粘贴到演示中吗?
    • 我看到了问题,我已经改变了答案。
    • 问题出现在 mysql 版本中,我在 mariadb 上尝试了代码,但现在运行良好,非常感谢您
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2013-11-28
    • 2016-09-10
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多