gpt4 book ai didi

SQL 连接与聚合函数

转载 作者:行者123 更新时间:2023-12-04 10:43:54 25 4
gpt4 key购买 nike

我被要求开始更多地进行数据分析,并且遇到了 SQL 聚合函数的类似问题。这是一个非常简化的销售交易日志和仓库余额数据集:

SALES
Item Period
A 2019
A 2019
A 2018
B 2019

WAREHOUSE
Item SerialN
A 111
A 123
A 222
C 321

我需要运行 SQL 计数 功能在 销售表格很简单:
select count(a.Item), a.Item from SALES a
where a.period = 2019
group by a.Item

我还需要添加 计数 中的项目 仓库表 - 本身也非常简单,但在尝试将它们组合成一个查询结果时并不那么简单。
select count(a.Item), a.Item, count(b.Item) from SALES a
left join WAREHOUSE b on a.Item = b.Item

where a.period = 2019
group by a.Item

由于来自 WAREHOUSE 表的 JOIN 乘法效应,上面的一个会弄乱结果。达到以下结果的最佳方法是什么?有没有一种巧妙的方法来做到这一点?
Item    count_period    current_warehouse
A 2 3
B 1

最佳答案

首先,您需要对第一个表中的数据进行分组和过滤,然后与第二个表连接。像这样:

select A.item, A.count_period, count(W.item) current_warehouse
from (select S.item, max(S.Period) Period, count(S.Period) count_period
from SALES S
where S.Period = 2019
group by S.item) A
left join WAREHOUSE W on A.Item = W.Item
group by A.item, A.count_period;

另一种方法是:
select A.item, A.count_period, B.current_warehouse from 
(select S.item, max(S.Period) Period, count(S.Period) count_period
from SALES S
where S.Period = 2019
group by S.item) A
left join
(select W.item, count(W.item) current_warehouse
from WAREHOUSE W
group by W.item) B
on A.item = B.item

或者
select A.item, max(A.count_period), count(W.item) current_warehouse
from (select S.item, max(S.Period) Period, count(S.Period) count_period
from SALES S
where S.Period = 2019
group by S.item) A
left join WAREHOUSE W on A.Item = W.Item
group by A.item;

在这里你有一个 DEMO您可以在其中看到所有三个都返回相同的数据。

关于SQL 连接与聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804251/

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