gpt4 book ai didi

mysql - 显示 NULL 行的 SQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:37 24 4
gpt4 key购买 nike

我有一个简单的表格:

Table: pn
id, vender, article, sells, date
01, Peter, bread, 10, 02-01-2019
02, Tom, bread, 3, 10-01-2019
03, Paul, water, 3, 05-01-2019
04, Peter, oil, 5, 16-01-2019
05, Paul, bread, 1, 22-01-2019
06, Tom, oil, 2, 30-01-2019
07, Peter, bread, 1, 27-01-2019
08, Tom, oil, 1, 17-01-2019

我希望有一个查询,该查询将返回每个供应商在特定时间段内针对特定商品的销售情况。例如:面包和油,介于 01-01-2019 和 31-01-2019 之间。查询结果应该是:

Vendor, Article, Sells
Paul, bread, 1
Paul, oil, 0
Peter, bread, 11
Peter, oil, 5
Tom, bread, 3
Tom, oil, 3

我的问题是,由于某些供应商没有销售特定商品,因此不会打印该供应商/商品的行,如下所示:

Vendor, Article, Sells
Paul, bread, 1
Peter, bread, 11
Peter, oil, 5
Tom, bread, 3
Tom, oil, 3

注意丢失的“Paul, oil, 0”

我当前的代码如下所示:

SELECT pn.vendor, pn.article, SUM (pn.sells)
FROM pn
WHERE pn.date BETWEEN 01.01.2019 AND 31.01.2019
AND (pn.article = 'bread' OR pn.article = 'oil')
GROUP BY pn.vendor, pn.article
ORDER BY pn.vendor ASC, pn.article ASC

我用 ISNULL 和 COALESC 尝试了许多不同的方法,但没有成功。欢迎任何帮助。

谢谢。

最佳答案

使用交叉连接生成行,然后使用左连接引入值。

SELECT v.vendor, a.article, COALESCE(SUM(pn.sells), 0)
FROM (SELECT DISTINCT vendor FROM pn) v CROSS JOIN
(SELECT DISTINCT article FROM pn) a LEFT JOIN
pn
ON pn.vendor = v.vendor AND
pn.article = a.article AND
pn.date >= '2019-01-01' AND
pn.date < '2019-02-01'
WHERE a.article IN ('bread', 'oil')
GROUP BY v.vendor, a.article
ORDER BY v.vendor ASC, a.article ASC;

注意事项:

  • 为您的日期使用标准日期格式(YYYY-MM-DD 是 SQL 和 ISO 8601 标准中的标准格式)。
  • 使用表别名限定所有列引用。
  • 我不知道 ORDER BY 中的 familia 是什么。
  • 在大多数数据库中,您可以只列出您想要的文章作为 a 的派生表。

关于mysql - 显示 NULL 行的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54630280/

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