SQL查漏补缺

1.基本语句

创建 create table 表名(int check(限制数值范围),decimal(精确,小数点位), primary key(),foreign key(外键 reference主键表(列名)))

插入语句insert into table(字段) value(值)

更新语句update table set col=‘’ where

删除语句delete from

视图create view 视图名 as select 

exists 检查返回外表是否有匹配的内表数据 

concat合并两个单元格

cast(字段 as 格式)

limit y offset x 跳过x条取y条

collect_list 列聚合为数组,不去重

collect_set 列聚合为数组,去重

concat_ws("",str,str) 拼接字符串

split(gamelist,",") 按逗号对str切割

explode() 将数组结构字段转换成多行 

LATERAL VIEW 结合explode使用 UDTF函数(一行输入多行输出)

 

2.扩展

语文数学英语三科分数均超过80份的名字

select name from s where score>=80
group by name having count(name)=3

select name from s
group by name having min(score)>=80

 

行列互换

年         季度        销售量
1991       1             11
1991       2             12
1991       3             13
1991       4             14
1992       1              21
1992       2              22
1992       3              23
1992       4              24

select year,
sum(case when month='1' then amount else 0 end) m1,
sum(case when month='2' then amount else 0 end) m2
from y
group by year

 

列转行 

uid game_list    uid game

a    .......      a .

b    .......      a .

select uid,game from user_game

LATERAL VIEW explode(split(game_list,",")) tmpTable as game

 

删除自动编号不同但其他信息相同的内容

id 号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69

delete from student2 where id not in(select mid from (select min(id) mid
from student2 group by name) as t);

 

区间统计

select kechen,
(case when score>=80 then '优秀'
when score>=60 then '及格'
when score<60 then '不及格' END)
from s
group by kechen

 

posted on 2020-07-30 17:12  喻解  阅读(130)  评论(0编辑  收藏  举报