公司网站设计策划案杭州正规企业网站建设
web/
2025/10/5 4:16:04/
文章来源:
公司网站设计策划案,杭州正规企业网站建设,零基础学全屋定制设计,手机网站分页毫不负责任的说#xff0c;你和数据科学家最大的鸿沟#xff0c;就差一个SQL语言#xff1a;)入门后#xff0c;后面的事情就简单了为了帮大家尽快入门Hive SQL、学会提数和分析#xff0c;实现在大数据领域大干一场的愿望#xff0c;帮你准备好了数据#xff0c;准备好… 毫不负责任的说你和数据科学家最大的鸿沟就差一个SQL语言)入门后后面的事情就简单了为了帮大家尽快入门Hive SQL、学会提数和分析实现在大数据领域大干一场的愿望帮你准备好了数据准备好了SQL样例照着学边学边练主要是解决学一门新手艺起点高入手难的问题。这个自编的课程分成如下的几个部分欢迎大家选读选练。特别说明两张示例表SQL示例简单select查询使用where语句按条件筛选使用distinct语句排重使用order by语句对查询结果排序使用sum/count/avg计算总和/计数/平均值等使用group by按照分组计算子查询使用join从多张表中查询数据使用union all拼接多份数据使用case when控制列输出SQL高级教程(待续)1. 特别说明本文中使用的数据集是从网上下来的测试数据数据地址https://github.com/markgrover/cloudcon-hive2. 两张示例表为了方便练习SQL语法特地准备了两张hive表ide_test.flights和 ide_test.airports 表结构如下面的建表语句。另外两张表中各有数行测试数据可以在练习SQL时直接使用。Flights表CREATE TABLE ide_test.flights(year string COMMENT year,month string COMMENT month,day string COMMENT day,dep_time string COMMENT 起飞时间,crs_dep_time string COMMENT 计划起飞时间,arr_time string COMMENT 到达时间,crs_arr_time string COMMENT 计划到达时间,carrier_code string COMMENT 航空公司代号,flight_num string COMMENT 航班号,actual_elapsed_time string COMMENT 实际耗时,crs_elapsed_time string COMMENT 计划耗时,air_time string COMMENT 飞行时间,arr_delay string COMMENT 到达延迟,dep_delay string COMMENT 起飞延迟,origin string COMMENT 起飞机场,dest string COMMENT 目标机场,distance string COMMENT 距离)COMMENT 测试数据-航班信息Airports表 CREATE TABLE ide_test.airports(name string COMMENT name,country string COMMENT country,area_code string COMMENT area_code,code string COMMENT code)COMMENT 测试数据-机场信息3. SQL示例3.1 简单select查询使用select语句可以查看表里的数据select用法--查询ide_test.airports表中的name列返回5行select name from ide_test.airports limit 5--使用 *代表表中所有列select * from ide_test.airports limit 5特别提示限制SQL返回的行数是一个好习惯如上面的 limit 5, 表示最多返回5行数据3.2 使用where语句按条件筛选使用where语句可以根据指定的条件刷选数据例如查看航班号为335的航班信息where用法 select * -- 返回表里所有列from ide_test.flightswhere flight_num 335 --返回flight_num列为335的记录limit 5 Tips: where后面跟的是一个逻辑表达式多个逻辑表达式用 AND、OR来连接3.3 使用distinct语句排重某一列(或多列)时常会有重复的值有时候需要去重之后再查看可以使用distinct语句来完成这个功能。例如查看ide_test.flights表中包含了那几年的数据可以使用下面的SQL语句来完成distinct 用法selectdistinct year -- distinct会对year列的值去重之后再返回from ide_test.flightslimit 10Tips查看某列包含了哪些值有更好的写法这里只是展示下distinct语句的用法3.4 使用order by语句对查询结果排序找出起飞时间最晚的5个航班order by 用法select origin, dest, flight_num, dep_timefrom ide_test.flightsorder by dep_time desc-- 按照起飞时间倒序排列 desc表示由大到小排序 -- asc(或者是省略不写)表示由小到大排序 limit 53.5 使用sum/count/avg计算总和/计数/平均值等使用count()函数可以计数比如要看一下ide_test.flights表里一共有多少个航班信息则可以这么写:count 用法 selectcount(flight_num) as cnt -- count函数表示计数from ide_test.flightslimit 10sum表示按照指定的列求和比如计算一下335号航班一共飞行了多少公里sum 用法selectsum(cast(distance as int)) as total_distance --sum函数表示求和from ide_test.flightswhere flight_num 335limit 10Tips: count/sum这种函数叫聚合函数还有其他聚合函数比如avg/max/min分别用户求平均值、最大值和最小值3.6 使用group by按照分组计算group by语句的用处很大它可以先对数据分组、然后再计算看个例子就明白了。比如要计算每个航班飞行的里程数并按照总数由大到小取前10个写法如下group by 用法select flight_num, sum(distance) as total_distance--除了sum/count/avg/min/max这些聚合函数之外-- 明确写在select之后的列必须同时出现在group by的后面from ide_test.flightsgroup by flight_num --按照航班号分组对每一组的里程数求和order by total_distance desclimit 10还有一种情况查询总飞行里程数大于3000的航班号这时having语句就排上用场了having 语法select flight_num --写在select之后的列必须同时出现在group by的后面from ide_test.flightsgroup by flight_numhaving sum(distance) 3000--刷选出飞行总里程大于3000的航班limit 5小思考为什么这种情况下要使用having来作为筛选条件而不是使用where资料深入理解Hive Group by语法3.7 子查询要计算飞行总里程大于3000的航班数量SQL可以这么写子查询用法select count(1) as cntfrom (select flight_numfrom ide_test.flightsgroup by flight_numhaving sum(distance) 3000 ) tTips: 子查询的用法和普通hive表是一样的一般为了清晰会使用括号()把子查询包含起来3.8 使用join从多张表中查询数据假如我们计划查询每个航班的飞行里程和起始机场名称因为这两个信息分别存储在两张不同的hive表中因此需要同时查询两张hive表才能得到结果写法如下join 用法 select p.flight_num, -- 从flights表取出航班号 p.distance, --从flights表取出飞行里程 q.name --从airports表取出出发的机场名称from ide_test.flights pleft join ide_test.airports qon p.origin q.codelimit 10Tipsleft join左表关联右表当坐标中存在某值而右表不存在时则右表对应信息使用null代替inner join只有左表和右表都存在对应值的时候才出现的结果中right join与left join相反full outer join当左表或右表不存在相应值时使用null代替延伸阅读做做思维操注意如果A中有m条记录B中有n条记录A join B的时候则最多会产生m*n条记录想想为什么3.9 使用union all拼接多份数据UNION 语句符用于合并两个或多个 SELECT 语句的结果集。选出飞行里程大于1000或小于100的航班SQL写法如下 注意这里只是为了展示union用法显然应该有更好的写法自己思考下)union 用法 select flight_numfrom ide_test.flightswhere distance 1000unionselect flight_numfrom ide_test.flightswhere distance 100Tips: 请注意UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时每条 SELECT 语句中的列的顺序必须相同3.10 使用case when控制列输出查询航班的飞行距离按照距离分成“长、中、短”三个级别可以借助case when语句来实现示例写法case when 用法 select flight_num, distance,case when distance 3000 then 长距离航班when distance 1000 then 中距离航班else 近距离航班end as flight_levelfrom ide_test.flightslimit 10Tips: 使用case when可以灵活自定义查询结果。另外case when还可以和count/sum等聚合函数使用来实现有条件的计数/汇总4. SQL高级教程(待续)window函数处理Json格式数据处理XML格式数据行列转换使用with语法数据抽样/完其他文章通过在阿里的实践谈一下中台建设的Why、When与HowCTO内参 | Gartner报告近年十大战略性技术趋势自主设备、增强分析、AI驱动的开发、数字双生、边缘计算等从党的成功经验看企业中台建设*每次「在看」都是鼓励* ?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87156.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!