sql相当于每个

时间:2018-02-21 01:04:57

标签: sql join impala

我在使用MySQL创建并在HDFS中使用HIVE导入的Imapla表中查询。 我有搜索,我知道这在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           |
+---------+-------------+

最终我想为每个订单返回total_wt(根据一个order_id中的所有prod_ids计算)。我已加入所有表格:

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;

在考虑如何做到这一点时,我想到了每个循环,但我知道不支持。还有什么其他方法可以完成同样的事情?我知道我需要在一个order_id中对所有prod_id执行所有shipping_wts的SUM(),但我不确定如何。

有人能指出我正确的方向吗?我真的很想学习,我想要理解接近这样的事情的心态。

谢谢!

1 个答案:

答案 0 :(得分:1)

添加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;