sql sum(distinct 不同元素 其他列值_sql-多表查询

一、表的加法

a.将两个表按行合并在一起。使用union将两个表联结在一起。union将重复数据删除;union all保留重复数据

4fbc01605e5899380ef4f1e18d1dc038.png

b.注意事项

  • 作为运算对象的记录列数必须相同.。当两张表的列数不相同时,UNION是不能将两张表相加的。
    作为运算对象的记录中列的类型必须一致.。不同类型的数据肯定不能存放在同一列的,如果非要相加的话,可以尝试类型转换。
    可以使用任何SELECT 语句,但ORDER BY子句只能在最后使用一次.

二、表的联结

数据之间的关系:在生活中,你是你爸爸的儿子,你是你儿子的爸爸,这是生活中的关系。数据之间也是有关系的,关系数据库各个表之间如何建立关系呢?例如学生表(学号、姓名、出生日期、性别)和成绩表(学号、课程号、成绩)通过学号将两个表关联起来,如果你想知道0001学生的成绩,那么可以根据学号在成绩表中找0001的行。关系就是数据库能够对应匹配,在关系库中,正式的名字叫做联结(join)。4张表联结关系图如下:

640ab92ba4ce3f606effc4a365148151.png

a.交叉联结 :又称为笛卡尔积,是将两表中的数据两两进行组合,交叉的行数是两个张表行数据的乘积。其他联结的基础是交叉联结,在交叉联结的基础加上了过滤条件。

b.内联结:根据两个表共有的列来匹配其中的行,强调只有两个表共有的列值对应的行才能匹配出来

9d0f971e552bcebcca29aed0a0e538ec.png

c.左联结:无论右表对应行是否包含满足连接条件的数据,都会保留左表,两表相匹配的匹配,不能匹配的以null显示。

a4075fe62e40e58a6c2ec7fbd01e7e86.png

d.右联结:无论左表对应行是否包含满足连接条件的数据,都会保留右表,两表相匹配的匹配,不能匹配的以null显示

80b7a6b7c34b4073700b3a1fc1d59f14.png

e.全联结(full join ):两个表中的数据全部保留,mysql不支持全联结

三、表的联结图汇总

a.生成固定行数的表单或者特别说明了哪张表的数据时(所有,,,),使用左联结或者右联结,其他情况用内联结。

4b55d85ae3f487db644c1aa615430069.png

b.sql运行顺序

sql-查询及注意事项 - zyzy的文章 - 知乎 https://zhuanlan.zhihu.com/p/335547824

四、case表达式以及案例

06b4a668436fc6a3fc6ddb466664ff59.png

a.案例:查询成绩是否属于及格还是不及格

241e2ec15c2b7c39b655091bc27a25d5.png

b.注意事项:

  • else可以省略不写,此时默认为表达式为空值,但是最好写上;
  • end不可以省略不写;
  • case表达式可以写在sql语句任何地方;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以hive的角度检查语法: with cur_dim_comb as (SELECT DISTINCT t.dim_comb ,t.var_sub_class ,t.acc_value FROM gerp.cux_cst_data_alloc_his t WHERE t.top_var_type = '10' AND t.job_ver_id in (SELECT ver.job_ver_id AS p_job_ver_id FROM gerp.cux_cst_dist_jobs_all job INNER JOIN gerp.cux_cst_dist_jobs_vers_all ver ON job.job_id = ver.job_id )) select tp.bd_code --事业部编码 ,tp.bd_name --事业部名称 ,hp.ou_code --OU名称 ,hp.ou_name --OU编码 ,op.main_class_desc --差异大类 ,op.acc_value --科目代码 ,op.acc_desc --科目名称 ,op.dim_comb --区分维度 ,op.begin_amount --期初余额 ,op.accrual_amount --本期发生 ,op.balance_diff_alloc_amount --期末差异结存 ,op.var_sub_class ,op.main_class_value ,op.org_id ,op.period_name ,op.job_ver_id from (select up.* ,q1.* from (SELECT DISTINCT maincl.* ,t.* FROM t inner join (SELECT fv.flex_value ,fv.description FROM fv inner join fs on fv.flex_value_set_id = fs.flex_value_set_id AND fs.flex_value_set_name = 'CUX_CST_VARIANCE_TYPE' AND fv.enabled_flag = 'Y' AND fv.hierarchy_level = '2' AND fv.flex_value LIKE '10%' ) maincl on t.var_main_class = maincl.flex_value inner join cur_dim_comb on cur_dim_comb.var_sub_class = t.var_sub_class and cur_dim_comb.acc_value = t.acc_value WHERE 1 = 1 AND t.top_var_type = '10' AND t.job_ver_id in (SELECT ver.job_ver_id AS p_job_ver_id FROM gerp.cux_cst_dist_jobs_all job INNER JOIN gerp.cux_cst_dist_jobs_vers_all ver ON job.job_id = ver.job_id) ORDER BY maincl.description ,t.acc_value ,cur_dim_comb.dim_comb ) up inner join (SELECT t1.* ,SUM(t1.begin_amount) begin_amount ,SUM(t1.accrual_amount) accrual_amount ,SUM(t1.balance_diff_alloc_amount) balance_diff_alloc_amount FROM gerp.cux_cst_data_alloc_his t1 LEFT JOIN gerp.cux_cst_data_alloc_his t ON t1.top_var_type = '10' AND t1.var_sub_class = t.var_sub_class --p_var_sub_class AND t1.org_id = t.org_id --p_org_id AND t1.period_name = t.period_name --p_period_name AND t1.job_ver_id = t.job_ver_id --p_job_ver_id AND t1.acc_value = t.acc_value --p_acc_value WHERE t1.dim_comb in (select distinct dim_comb from cur_dim_comb) group by t1.org_id,t1.period_name,t1.job_ver_id,t1.var_sub_class,t1.acc_value ) q1 on q1.org_id = up.org_id --p_org_id AND q1.period_name = up.period_name --p_period_name AND q1.job_ver_id = up.job_ver_id --p_job_ver_id AND q1.var_sub_class = up.var_sub_class --p_var_sub_class AND q1.acc_value = up.acc_value --p_acc_value ) op
最新发布
05-26

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值