设置 MySQL 连接间隔年月的默认值
P粉924915787
P粉924915787 2024-02-25 18:16:02
0
1
300

我的查询有问题。我有两个表,我想加入它们以根据第一个表上的主键获取结果,但我缺少第一个表中的 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 

查看演示

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!