在聚合 table 的列中应用转换因子并使用另一个聚合 table 执行计算
Apply conversion factor in a column for an aggregated table and perform calculation with another aggregated table
我在 Hive 中有以下表格。是否可以通过单个查询完成所有这些操作?
以下操作在表中完成:
在表 1 中,基于 'center' 列的用户总数
在表 2 中:
- 每个中心代码(A1) 与不同的帐户相关联。
- 要应用于费用列的换算系数(应以卢比为单位)
- 然后求费用总额
输出应该是Result=sum[Expense in Rupees]/sum[Users#]
感谢任何形式的指导。
如果您也指定输出值,那将非常容易理解。对于您的问题,是的,您可以使用 CASE
在一个查询中实现转换
SELECT
center,
account,
SUM(expenses)/SUM(users) AS result
FROM
(
SELECT
t2.center AS center,
t1.users AS users,
CASE
WHEN t2.currency = 'USD' THEN (t2.expenses*70)
WHEN t2.currency = 'MYR' THEN (t2.expenses*17)
WHEN t2.currency = 'AUD' THEN (t2.expenses*50)
WHEN t2.currency = 'INR' THEN t2.expenses
ELSE 'invalid'
END AS expenses,
t2.currency AS currency,
t2.account AS account
FROM
table1 t1
JOIN
table2 t2
ON(t1.center=t2.center)
) joined_data
GROUP BY center,account
ORDER BY center,account
我没有对此进行测试,但它应该可以工作。在最坏的情况下,它可能会抛出一个小的语法错误,你应该能够处理它。 :)
我在 Hive 中有以下表格。是否可以通过单个查询完成所有这些操作? 以下操作在表中完成:
在表 1 中,基于 'center' 列的用户总数
在表 2 中:
- 每个中心代码(A1) 与不同的帐户相关联。
- 要应用于费用列的换算系数(应以卢比为单位)
- 然后求费用总额
输出应该是Result=sum[Expense in Rupees]/sum[Users#]
感谢任何形式的指导。
如果您也指定输出值,那将非常容易理解。对于您的问题,是的,您可以使用 CASE
在一个查询中实现转换SELECT
center,
account,
SUM(expenses)/SUM(users) AS result
FROM
(
SELECT
t2.center AS center,
t1.users AS users,
CASE
WHEN t2.currency = 'USD' THEN (t2.expenses*70)
WHEN t2.currency = 'MYR' THEN (t2.expenses*17)
WHEN t2.currency = 'AUD' THEN (t2.expenses*50)
WHEN t2.currency = 'INR' THEN t2.expenses
ELSE 'invalid'
END AS expenses,
t2.currency AS currency,
t2.account AS account
FROM
table1 t1
JOIN
table2 t2
ON(t1.center=t2.center)
) joined_data
GROUP BY center,account
ORDER BY center,account
我没有对此进行测试,但它应该可以工作。在最坏的情况下,它可能会抛出一个小的语法错误,你应该能够处理它。 :)