首页 > 解决方案 > 如何将一张桌子与另一张桌子连接起来并计算每天的物品登记数量?

问题描述

我在这里遇到了一个问题。我有两张表:一张是产品和仓库员工检查的日期(date_checked),另一张是销售数据,如下所示:

PRODUCTS
    date_checked |  product_name       | category       | product_id
_____________________________________________________________________
0   2021-01-01   |  tv                 | entertainment  | 100
1   2021-01-03   |  laptop             | business       | 110
SALES
    sale_date    |  product_name       | category       | product_id
_____________________________________________________________________
0   2021-01-01   |  tv                 | entertainment  | 100
1   2021-01-01   |  laptop             | business       | 110
2   2021-01-01   |  tv                 | entertainment  | 100
3   2021-01-01   |  laptop             | business       | 110
4   2021-01-01   |  tv                 | entertainment  | 100
5   2021-01-03   |  laptop             | business       | 110
6   2021-01-03   |  tv                 | entertainment  | 100
7   2021-01-03   |  laptop             | business       | 110
7   2021-01-03   |  laptop             | business       | 110

我的目标是创建一个新表,其中包含 PRODUCTS 表的所有数据以及 date_checked 中售出的产品数量。例如:电视产品于 1 月 1 日进行了检查,同一天售出了 3 台电视。笔记本电脑于 1 月 3 日进行了检查,当天售出了 3 台笔记本电脑,如下所示:

SALES_AT_CHECK_DAY
    date_checked |  product_name       | category       | product_id | sales
_____________________________________________________________________________
0   2021-01-01   |  tv                 | entertainment  | 100        | 3
1   2021-01-03   |  laptop             | business       | 110        | 3

我知道我需要在这里使用连接,但我无法计算在某一天售出了多少产品。你们能帮帮我吗?

非常感谢?

标签: sqldatabasejoindatabricks

解决方案


首先,您的数据模型似乎很差,因为您在两个表之间重复列。您应该只输入主键,sales然后查找其他信息。

select p.date_checked, s.product_name, s.category, s.product_id, 
       count(*) as sales
from sales s join
     products p
     on s.product_id = p.product_id and
        s.sale_date = p.date_checked
group by p.date_checked, s.product_name, s.category, s.product_id;

推荐阅读