gpt4 book ai didi

mysql - 如何从 MySQL 中的唯一表获取今年和去年

转载 作者:行者123 更新时间:2023-11-29 15:36:27 27 4
gpt4 key购买 nike

因此,我尝试获取一列用于今年的生产,另一列用于去年的生产,并使用日历表来确保我拥有所有日期,即使我在某些日期没有生产。

所以我有两张表:一张有日期(没有重复),另一张有我的作品。这是我的数据表:

propertyCode    dte         prodCode    unitSold
A 2018-10-01 A10 1
A 2018-10-01 A11 1
A 2019-10-01 A10 1
A 2019-10-01 A11 1
B 2018-10-01 A10 1
B 2018-10-01 A11 1
B 2019-10-01 A10 1
B 2019-10-01 A11 1

我使用的以下代码给了我重复项,但我不明白为什么:

SELECT SUM(d1.unitSold) sldTY, SUM(d2.unitSold) sldLY
FROM calendar c
LEFT JOIN data d1 ON d1.propertyCode='A' AND c.dteTY=d1.dte
LEFT JOIN data d2 ON d2.propertyCode='A' AND c.dteLY=d2.dte
WHERE c.dteTY='2019-10-01'

请参阅 SQL Fiddle 示例:http://sqlfiddle.com/#!9/0e093b/4/0

我今年和去年都应该得到 2,但它给了我 4,我真的不明白为什么......

最佳答案

发生这种情况是因为第一个连接有两个匹配的行;然后,第二个连接对于之前找到的每个匹配行也有两个匹配行。所以它变成 2*2 = 4 匹配行,从而重复。

使用 Correlated Subquery 尝试以下操作相反:

SELECT 
(SELECT SUM(d1.unitSold)
FROM data d1
WHERE d1.propertyCode = 'A'
AND d1.dte = c.dteTY) sldTY,
(SELECT SUM(d1.unitSold)
FROM data d1
WHERE d1.propertyCode = 'A'
AND d1.dte = c.dteLY) sldLY
FROM calendar c
WHERE c.dteTY='2019-10-01'

SQL fiddle :http://sqlfiddle.com/#!9/0e093b/15

关于mysql - 如何从 MySQL 中的唯一表获取今年和去年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58202796/

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