要解决的问题是:从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 拼接条件