左连接后浮点值减少
Float value decrease after left join
1st Table : AggregateValuesSum - SumProfit 和 NbCustomers 按所有其他特征列分组计算。
Date MonthStatus Gender Age Income State SumProfit NbCustomers
2011-01-01 Status1 F 50 12000 CA 450000 3
2011-01-01 Status2 F 50 12000 CA 450000 2
2011-01-01 Status1 F 50 12000 CA 46000 2
2012-01-01 Status1 H 25 15000 NF -500 1
2012-01-01 Status2 H 45 20000 QC 12000 5
2nd Table : AggregatesBudget - 与 AggregatesValueSum 相同 table,但没有 MonthStatus 列。 SumBudget 是按所有其他特征分组计算的(对于其他分析):
Date Gender Age Income State SumBudget
2011-01-01 F 50 12000 CA 30000
2012-01-01 H 25 15000 NF 10000
2012-01-01 H 45 20000 QC 5000
Final table : ConsolidationTable - 在公共行(性别、年龄、收入、状态)。所以我拥有所有特征和所有计算值。
Date MonthStatus Gender Age Income State SumProfit NbCustomers SumBudget
2011-01-01 Status1 F 50 12000 CA 450000 3 30000
2011-01-01 Status2 F 50 12000 CA 450000 2 30000
2011-01-01 Status1 F 50 12000 CA 46000 2 30000
2012-01-01 Status1 H 25 15000 NF -500 1 -20000
2012-01-01 Status2 H 45 20000 QC 12000 5 5000
如您所见,对于具有相同特征的行,在不考虑 Sumprofit 和 MonthStatus 的情况下,SumBudget 在此最终 table 中重复。 (这是正常的)
目前看来一切都很好。然后我验证 SumBudget 每个 Date 的总数,并比较第二个 tables 和最终 table 给出的结果:
Select
Date,
Sum(SumBudget) as TotalBudgetPerDate
from AggregatesBudget
group by Date
对于某些日期,当我这样做时它会给我不同的结果:
Select
Date,
Sum( distinct SumBudget) as TotalBudgetPerDate
from ConsolidationTable
group by Date
问题:
- TotalBudgetPerDate中的AggregatesBudgetTable总是什么
我希望这样没关系。
我必须在我的第二个查询中添加一个不同的,因为在合并 table 中有重复的 SumBudget
对于日期的大部分时间,我的结果与 AggregatesBudget Table 相同。但有时 ConsolidationTable 中的结果对于某些日期不正确。
我不明白为什么!
注意:这实际上是假数据,我有 49Md 行。由于敏感,我不会分享真实数据。
distinct SumBudget
将删除重复值。
Sum(distinct SumBudget)
只会添加唯一值,导致某些日期的数据丢失。
如果您在单个日期的 aggregatesbudget
table 中有重复的值(假设您总体上没有重复的键),则会发生这种情况。您可以使用以下方式检查:
select date, sumbudget, count(*)
from aggregatesbudget
group by date, sumbudget
having count(*) > 1;
你可以使用window函数解决这个问题:
select date, sum(sumbudget)
from (select ct.*,
row_number() over (partition by Gender, Age, Income, State, date order by date) as seqnum
from ConsolidationTable ct
) ct
where seqnum = 1
group by date;
1st Table : AggregateValuesSum - SumProfit 和 NbCustomers 按所有其他特征列分组计算。
Date MonthStatus Gender Age Income State SumProfit NbCustomers
2011-01-01 Status1 F 50 12000 CA 450000 3
2011-01-01 Status2 F 50 12000 CA 450000 2
2011-01-01 Status1 F 50 12000 CA 46000 2
2012-01-01 Status1 H 25 15000 NF -500 1
2012-01-01 Status2 H 45 20000 QC 12000 5
2nd Table : AggregatesBudget - 与 AggregatesValueSum 相同 table,但没有 MonthStatus 列。 SumBudget 是按所有其他特征分组计算的(对于其他分析):
Date Gender Age Income State SumBudget
2011-01-01 F 50 12000 CA 30000
2012-01-01 H 25 15000 NF 10000
2012-01-01 H 45 20000 QC 5000
Final table : ConsolidationTable - 在公共行(性别、年龄、收入、状态)。所以我拥有所有特征和所有计算值。
Date MonthStatus Gender Age Income State SumProfit NbCustomers SumBudget
2011-01-01 Status1 F 50 12000 CA 450000 3 30000
2011-01-01 Status2 F 50 12000 CA 450000 2 30000
2011-01-01 Status1 F 50 12000 CA 46000 2 30000
2012-01-01 Status1 H 25 15000 NF -500 1 -20000
2012-01-01 Status2 H 45 20000 QC 12000 5 5000
如您所见,对于具有相同特征的行,在不考虑 Sumprofit 和 MonthStatus 的情况下,SumBudget 在此最终 table 中重复。 (这是正常的)
目前看来一切都很好。然后我验证 SumBudget 每个 Date 的总数,并比较第二个 tables 和最终 table 给出的结果:
Select
Date,
Sum(SumBudget) as TotalBudgetPerDate
from AggregatesBudget
group by Date
对于某些日期,当我这样做时它会给我不同的结果:
Select
Date,
Sum( distinct SumBudget) as TotalBudgetPerDate
from ConsolidationTable
group by Date
问题:
- TotalBudgetPerDate中的AggregatesBudgetTable总是什么 我希望这样没关系。
我必须在我的第二个查询中添加一个不同的,因为在合并 table 中有重复的 SumBudget
对于日期的大部分时间,我的结果与 AggregatesBudget Table 相同。但有时 ConsolidationTable 中的结果对于某些日期不正确。
我不明白为什么!
注意:这实际上是假数据,我有 49Md 行。由于敏感,我不会分享真实数据。
distinct SumBudget
将删除重复值。
Sum(distinct SumBudget)
只会添加唯一值,导致某些日期的数据丢失。
如果您在单个日期的 aggregatesbudget
table 中有重复的值(假设您总体上没有重复的键),则会发生这种情况。您可以使用以下方式检查:
select date, sumbudget, count(*)
from aggregatesbudget
group by date, sumbudget
having count(*) > 1;
你可以使用window函数解决这个问题:
select date, sum(sumbudget)
from (select ct.*,
row_number() over (partition by Gender, Age, Income, State, date order by date) as seqnum
from ConsolidationTable ct
) ct
where seqnum = 1
group by date;