中国统计网|SQL大厂面试常考知识点 | 新手速进!( 二 )
select*from
(
selectidfromtable_1
UNIONALL
selectidfromtable_2
)t;
union和union all均基于列合并多张表的数据 , 所合并的列格式必须完全一致 。 union的过程中会去重并降低效率 , union all直接追加数据 。 union前后是两段select 语句而非结果集 。
二.最常用
为方便大家理解每个函数的作用 , 先建一个表 , 后面以这个为示例 。
本文插图
1. 去重 distinct-- 罗列不同的id
selectdistinctidfromtable_1
-- 统计不同的id的个数
selectcount(distinctid)fromtable_1
-- 优化版本的count distinct
selectcount(*)from
(selectdistinctidfromtable_1) tb
distinct 会对结果集去重 , 对全部选择字段进行去重 , 并不能针对其中部分字段进行去重 。 使用count distinct进行去重统计会将reducer数量强制限定为1 , 而影响效率 , 因此适合改写为子查询 。
2. 聚合函数和group by-- 统计不同性别(F、M)中 , 不同的id个数
groupbysex
-- 其它的聚合函数例如:max/min/avg/sum
-- 统计最大/最小/平均年龄
selectmax(age),min(age),avg(age)from
table_1
groupbyid
聚合函数帮助我们进行基本的数据统计 , 例如计算最大值、最小值、平均值、总数、求和 。
3. 筛选 where/having-- 统计A公司的男女人数
wherecompany ='A'
-- 统计各公司的男性平均年龄 , 并且仅保留平均年龄30岁以上的公司
selectcompany,avg(age)fromtable_1
wheresex ='M'
groupbycompany
havingavg(age)>30;
4. 排序 order by-- 按年龄全局倒序排序取最年迈的10个人
selectid,agefromtable_1orderbyageDESC
limit 10
5. case when 条件函数-- 收入区间分组
selectid,
(casewhenCAST(salaryasfloat)<50000Then'0-5万'
whenCAST(salaryasfloat)>=50000andCAST(salaryasfloat)<100000then'5-10万'
whenCAST(salaryasfloat) >=100000andCAST(salaryasfloat)<200000then'10-20万'
whenCAST(salaryasfloat)>200000then'20万以上'
elseNULLend
fromtable_1;
case 函数的格式为(case when 条件1 then value1 else null end),其中else 可以省 , 但是end不可以省 。
在这个例子里也穿插了一个CAST的用法 , 它常用于string/int/double型的转换 。
6. 字符串
1)concat( A, B...)返回将A和B按顺序连接在一起的字符串 , 如:concat('foo', 'bar') 返回'foobar' 。selectconcat('www','.iteblog','.com')from
iteblog;
2)split(str, regex)用于将string类型数据按regex提取 , 分隔后转换为array 。-- 以","为分隔符分割字符串 , 并转化为array
Selectsplit("1,2,3",",")asvalue_arrayfromtable_1;
-- 结合array index,将原始字符串分割为3列
selectvalue_array[0],value_array[1],value_array[2]from
(selectsplit("1,2,3",",")asvalue_arrayfromtable_1 )t
3)substr(str,0,len)截取字符串从0位开始的长度为len个字符 。
推荐阅读
- 中年|中国-东盟区块链应用创新实验室揭牌
- IT爆料猿|中国电信6月5G用户数净增779万户,累计3784万
- 2020|影谱科技入选“2020中国AI商业落地价值潜力100强榜单”
- 中国航务周刊|港航业再现跨界收购!
- 招生|有道词典与中国教育在线合作,开通“高考招生”直播服务
- CSDN|由 Apache 说开,中国开源项目已经走向世界!
- AI财经社|谷歌云为何“放弃”中国市场?有人为它算了账,投入产出比太低
- 网速|全球网速排名:中国手机网速世界第三,美国第34
- 驱动中国|国内首次应用!支付宝开放宠物鼻纹识别技术:猫狗都能买保险
- 魅族|2020年BrandZ中国全球化品牌50强新鲜出炉,魅族再上榜,位列34名