sql等价于for each

guykilcj  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(288)

我在imapla表中进行查询,这些表是在mysql中创建的,在hdfs中通过hive导入的。我有搜索,我知道这不是官方支持或鼓励的sql,但它传达了我想做什么。以下是我正在使用的表:

Customers Table:
+---------+---------+
| cust_id | zipcode |
+---------+---------+
| 1       | 94964   |
| 2       | 98577   |
| 3       | 52593   |
| 4       | 43972   |
| 5       | 95298   |
+---------+---------+

Orders Table
+---------+----------+
| cust_id | order_id |
+---------+----------+
| 1       | 11       |
| 2       | 12       |
| 3       | 13       |
| 4       | 14       |
| 5       | 15       |
+---------+----------+

Order_Details Table
+----------+---------+
| order_id | prod_id |
+----------+---------+
| 11       | 123     |
| 11       | 124     |
| 11       | 125     |
| 14       | 126     |
| 15       | 127     |
+----------+---------+

Products Table
+---------+-------------+
| prod_id | shipping_wt |
+---------+-------------+
| 123     | 1           |
| 124     | 1           |
| 125     | 1           |
| 126     | 8           |
| 126     | 2           |
+---------+-------------+

最后,我要返回每个订单的总重量(从一个订单id中的所有产品id计算)。我已经加入了所有的表:

SELECT ord.order_id, cus.cust_id, cus.zipcode, ordet.prod_id, prod.shipping_wt 
FROM customers cus
JOIN orders ord
ON cus.cust_id = ord.cust_id
JOIN order_details ordet
ON ordet.order_id = ord.order_id
JOIN products prod
ON prod.prod_id = ordet.prod_id;

在考虑如何做到这一点时,我想到了for each循环,但我知道这是不受支持的。还有什么方法可以完成同样的任务?我知道我需要在一个订单id中为所有产品id做一个sum(),但是我不知道怎么做。
有人能给我指出正确的方向吗?我真的在努力学习,我想了解在处理这样的事情时的心态。
谢谢您!

8nuwlpux

8nuwlpux1#

添加sum和group by(以及一些格式,以便于查看我所做的工作):

SELECT 
    ord.order_id,
    SUM(prod.shipping_wt) 
FROM 
    order_details ordet
JOIN        
    products prod
ON 
    prod.prod_id = ordet.prod_id
GROUP BY
    ord.order_id;

相关问题