gpt4 book ai didi

MySQL 在连接表上返回 Null = 0,并在一个表上进行过滤

转载 作者:行者123 更新时间:2023-11-29 07:56:33 25 4
gpt4 key购买 nike

我正在尝试返回一个结果,该结果为我提供一段时间内每天的总交易值(value)。我有两张表,“日历”,其中包含 2013 年 12 月 31 日和 2014 年 12 月 31 日之间的所有日期。第二个表存储所有“customer_transactions”。我希望我的结果看起来像这样:

DATE         |      sum(value)
... ...
2014-07-28 10
2014-07-27 7
2014-07-26 0
2014-07-25 0
2014-07-24 5
... ...

我构建了一个有效的查询:

SELECT calendar.datefield AS DATE,
IFNULL(SUM(ct.value),0) AS total_sales
FROM calendar
LEFT JOIN customer_transactions as ct ON (calendar.datefield = from_unixtime(ct.date_edit, '%Y-%m-%d'))
WHERE (calendar.datefield BETWEEN ('2013-12-31') AND ('2014-12-31'))
GROUP BY DATE

但是,我想过滤结果以根据 customer_transactions 表中的列(例如 customer_id=5)仅返回特定客户的交易

如果我添加 WHERE 子句如下:

    SELECT calendar.datefield AS DATE,
IFNULL(SUM(ct.value),0) AS total_sales
FROM calendar
LEFT JOIN customer_transactions as ct ON (calendar.datefield = from_unixtime(ct.date_edit, '%Y-%m-%d'))
WHERE (calendar.datefield BETWEEN ('2013-12-01') AND ('2014-07-28'))
AND ct.customer_id=5
GROUP BY DATE

不再显示我的 null=0 值。我到处搜索,但找不到我做错了什么,我认为这是与 JOIN 有关的某种逻辑问题。

注意:“customer_transactions”表中存储的日期是 Unix 时间戳,在“日历”中采用 2014-01-01 格式

最佳答案

您已将条件添加到查询的错误部分。

LEFT JOIN 将没有交易的 calendar 记录的 customer_transactions 的所有列清空。将 ct.customer_id=5 添加到 WHERE 会删除所有这些空值行,因为 ct.customer_idNULL

您想要将条件添加到LEFT JOIN:

   SELECT calendar.datefield AS date, IFNULL(SUM(ct.value),0) AS total_sales
FROM calendar
LEFT JOIN customer_transactions as ct
ON (calendar.datefield = from_unixtime(ct.date_edit, '%Y-%m-%d'))
AND ct.customer_id=5
WHERE (calendar.datefield BETWEEN ('2013-12-31') AND ('2014-12-31'))
GROUP BY date

关于MySQL 在连接表上返回 Null = 0,并在一个表上进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com