多表联合查询求和(一)--使用Spark 的HiveContext 单条 select 实现

要解决的问题是:从A 表里获得交易卡号和对手账号,分别到B表查询其对应的姓名和身份证号,最终获得,a,b 打了多少钱
最后呈现的数据格式为:(用户A, 身份证号A, 用户B, 身份证号B, 转账金额 )
整体功能实现代码如下:

create table sumhivecontext
as
select Ao.openAccountIdNumber as A_ID, Ao.nameOfTheAccountOpening as A_name,
Bo.openAccountIdNumber as B_ID, Bo.nameOfTheAccountOpening as B_name,
sum (a.tradingAmount) as sumAmount
from 
account a left join openaccount Ao on  a.tradingCardNumber=Ao.tradingCard
left join openaccount Bo on  a.opponentAccount=Bo.tradingCard
where a.opponentAccount not like '+%' and a.opponentAccount != '' and Ao.openAccountIdNumber is not null and  Bo.openAccountIdNumber is not null and Ao.openAccountIdNumber !='' and  Bo.openAccountIdNumber !=''
group by Bo.openAccountIdNumber,Ao.openAccountIdNumber,
Ao.nameOfTheAccountOpening, Bo.nameOfTheAccountOpening;

代码段的基本思路及其涉及到的知识:

  • 数据库重命名
    当数据库字段过长时,通常会给数据库起个别名,
    怎么取别名呢?
select

列名 as 列别名,       //方法1

列名 列别名,          //方法2

from

表名;
  • 金额列进行求和
select sum(money) from user group by id;

直接sum(字段名)即可实现

  • where 条件选择
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....

多个条件限制的时候可以用add或or来进行指定
在这里主要是判断非空

  • 限定第一个字符不是 +
    在对手账户里,很多账户开头的第一位是+ ,在这里不予考虑,加限定条件
    采用的是下面的代码:
where a.opponentAccount not like '+%' 
  • 分组groupby
    要统计的是按人名进行分组计算,
gruopby   列名

在这里使用的代码是:

group by Bo.openAccountIdNumber,Ao.openAccountIdNumber,
Ao.nameOfTheAccountOpening, Bo.nameOfTheAccountOpening

当在做的过程中,可能会出现下面这个错误,

SemanticException [Error 10025]: Line 1:7 Expression not in GROUP BY key 'tradingCardNumber'

原因:group by中前面查找的必须在group by 中出现,

  • 数据表连接join
    因为查询可能需要查询A, B 分别对应的姓名和身份证号,所以需要多表联合查询,在这通过jion进行连接另外两个表。

JOIN 按照功能大致分为如下三类:
(1)INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
(2)LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
(3)RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
基本用法

select   字段名   from  表名   join   另一个表名  on  拼接条件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值