设置 MySQL 连接间隔年月的默认值
P粉924915787
P粉924915787 2024-02-25 18:16:02
[MySQL讨论组]

我的查询有问题。我有两个表,我想加入它们以根据第一个表上的主键获取结果,但我缺少第一个表中的 1 个数据。

这是我的小提琴

如您所见,我缺少第 1 个月的“xx3”

我尝试更改左右连接,但结果仍然相同。 所以如你所见,我必须将 coalesce(sum(b.sd_qty),0) 设置为总计, 如果没有 qty,则将 0 设置为默认值。

P粉924915787
P粉924915787

全部回复(1)
P粉287726308

您还应该将表交叉连接到不同的日期:

SELECT a.item_code,
       COALESCE(SUM(b.sd_qty), 0) total,
       DATE_FORMAT(d.sd_date, '%m-%Y') month_year
FROM item a 
CROSS JOIN (
  SELECT DISTINCT sd_date 
  FROM sales_details 
  WHERE sd_date >= '2020-04-01' - INTERVAL 3 MONTH AND sd_date 

或者,对于 MySql 8.0+,使用递归 CTE 返回您想要结果的所有月份的开始日期,可以交叉连接到表:

WITH RECURSIVE dates AS (
  SELECT '2020-04-01' - INTERVAL 3 MONTH AS sd_date
  UNION ALL
  SELECT sd_date + INTERVAL 1 MONTH
  FROM dates 
  WHERE sd_date + INTERVAL 1 MONTH 

查看演示

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号