gpt4 book ai didi

MySQL 当行不存在时返回 0

转载 作者:行者123 更新时间:2023-11-29 18:08:46 25 4
gpt4 key购买 nike

下面是我们解决问题所需的极其复杂且难以阅读的 SQL 语句,我们想知道是否有一种我们忽略或不知道的更简单的方法来做到这一点。

问题:我们正在创建一个报告,需要汇总特定销售类别的销售数据并按类别对其进行分组。问题是,当某个类次在该类别中没有任何销售额时,它不会返回任何内容。这对我们不起作用,因为这会导致数据无法与类次正确对齐。因此,我们所需要的只是让查询在不存在移位实例的情况下返回零。我们尝试了左连接、case 语句、合并、联合等...最终起作用的是下面的怪物。任何有关如何更简单地完成此操作的想法将不胜感激。

 SELECT shift_seq,
amount
FROM ((SELECT t.shift_seq,
CASE
WHEN EXISTS (SELECT t.shift_seq,
i.amount
FROM a_item AS i,
a_ticket AS t
WHERE i.ticket = t.ticket
AND i.department = 11) THEN
Round(Sum(i.amount), 2)
ELSE 0.00
END AS Amount
FROM a_ticket AS t
LEFT JOIN a_item AS i
ON i.ticket = t.ticket
WHERE i.department = 11
GROUP BY t.shift_seq
ORDER BY t.shift_seq)
UNION
(SELECT t.shift_seq,
0 AS Amount
FROM a_ticket AS t)) AS a
GROUP BY shift_seq
ORDER BY shift_seq

最佳答案

对我来说,WHERE i.department = 11条件似乎有效地将您的左连接变成内连接,因为该条件适用于右手边的 table 。这使得整个 case 表达式变得多余,因为 else 分支永远不会执行。

老实说,我认为您只需将上述标准移至连接条件中,然后对空值应用一个简单的 sum()coalesce() :

     SELECT t.shift_seq,
coalesce(Sum(i.amount),0) AS Amount
FROM a_ticket AS t
LEFT JOIN a_item AS i ON i.ticket = t.ticket AND i.department = 11
GROUP BY t.shift_seq

关于MySQL 当行不存在时返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581202/

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