我在使用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(),但我不确定如何。
有人能指出我正确的方向吗?我真的很想学习,我想要理解接近这样的事情的心态。
谢谢!
答案 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;