在文件上使用 SQL 查询的示例

在数据分析业务中经常要处理数据文件。我们知道,对于数据库中的数据,使用SQL来查询是非常方便快捷的,所以很容易想到把文件数据先导入到数据库再用SQL来查询。但是文件数据导入数据库本身也是很繁琐的工作,那么有没有直接对数据文件使用SQL查询的办法呢?本文将介绍这样的办法,列举出用 SQL 查询文件数据的各种情况,并提供用 esProc SPL 编写的代码示例。esProc 是专业的数据计算引擎,SPL 中提供了完善的用 SQL 查询文件数据的方法。本文用文本文件举例,但同时也适用于Excel文件。1.  过滤使用SQL从文本文件中筛选满足条件的记录。示例:从学生成绩表Students_scores.txt中筛选出10班的学生成绩,文件中第一行是列名,第二行开始是数据,如下图所示。

A1$select * from   E:/txt/Students_scores.txt where2.  汇总使用SQL对文本文件中的数据进行汇总。示例:计算学生成绩表中全体学生的语文平均分、数学最高分、英语总分。A1$select   avg(Chinese),max(Math),sum(English) from E:/txt/Students_scores.txt3.  跨列计算使用SQL对文本文件中的数据进行跨列计算。示例:计算学生成绩表中每位学生的总分。A1$select   *,English+Chinese+Math as total_score from E:/txt/students_scores.txtA1中结果如下,增加了一个新的计算列total_score:

4.  CASE语句在SQL中可以使用CASE语句进行复杂条件计算。示例:计算学生成绩表中每位同学的英语成绩是否及格。A1$select   *, case when English>=60 then 'Pass' else 'Fail' end as English_evaluation   from E:/txt/students_scores.txtA1中结果如下,增加了一个新的计算列English_evaluation:

5.  排序使用SQL对文本文件中的数据进行升/降序排序。示例:将学生成绩表按照班号升序、总分降序的顺序排列。A1$select *   from E:/txt/students_scores.txt order by CLASS,English+Chinese+Math desc6.  TOP-N使用SQL对文本文件中的数据求TOP-N。示例:查看英语成绩最高的3个同学成绩。A1$select   top 3 * from E:/txt/students_scores.txt order by English desc7.  分组汇总使用SQL对文本文件中的数据进行分组汇总。示例:查询各班的英语最低分、语文最高分、数学总分。A1$select   CLASS,min(English),max(Chinese),sum(Math) from E:/txt/students_scores.txt   group by CLASS8.   分组后过滤使用SQL对文本文件中的数据分组汇总后再过滤。示例:找出英语平均分低于70分的班级。A1$select   CLASS,avg(English) as avg_En from E:/txt/students_scores.txt group by CLASS having   avg(English)<70A1中查询结果如下:

9.  去重使用SQL对文本文件中的数据进行去重查询。示例:查询所有班级编号。A1$select   distinct CLASS from E:/txt/students_scores.txt10.   去重计数使用SQL对文本文件中的数据进行去重计数。示例:在产品数据文件中,统计共有多少种不同产品。文件部分数据如下所示:

A1$select   count(distinct PID) from E:/txt/PRODUCT_SALE.txt11.  分组去重计数使用SQL分组对文本文件中的数据分组后进行去重计数。示例:根据产品销售数据文件,统计每个产品有销售记录的天数。A1$select   PID,count(distinct DATE) as no_sdate from E:/txt/PRODUCT_SALE.txt group by   PID12.   两个文件关联查询使用SQL对两个文本文件中的数据进行关联查询。示例:产品信息和销售信息分别存储在两个文本文件中,计算每次销售数量小于10的产品的总销售额。两个文件数据结构如下图:

A1$select   sum(S.quantity*P.Price) as totalfrom E:/txt/Sales.txt as S   join E:/txt/Products.txt as P on S.productid=P.IDwhere S.quantity<=1013.  多个文件关联查询使用SQL对多个文本文件中的数据进行关联查询。示例:州信息,部门信息和员工信息分别存储在3个文本文件中,查询California州的HR部门的员工。A1$select   e.NAME as NAMEfrom  E:/txt/EMPLOYEE_J.txt  as ejoin E:/txt/DEPARTMENT.txt as d on   e.DEPTID=d.DEPTIDjoin E:/txt/STATE.txt as s on   e.STATEID=s.STATEIDwhered.NAME='HR' and s.NAME='California'14.  多个文件多级关联查询使用SQL对多个文本文件中的数据进行多级关联查询。示例:州信息,部门信息和员工信息分别存储在3个文本文件中,查询经理在California州的New York州员工。A1$select   e.NAME as ENAMEfrom   E:/txt/EMPLOYEE.txt  as ejoin E:/txt/DEPARTMENT.txt as d on   e.DEPT=d.NAMEjoin E:/txt/EMPLOYEE.txt  as emp on d.MANAGER=emp.EIDwhere   e.STATE='New York' and emp.STATE='California'15.   嵌套子查询支持复杂SQL作为子查询。示例:员工信息和部门信息分别存储在2个文本文件中,找出部门经理最年轻的部门。文件部分数据如下图所示:

A1$select   emp.BIRTHDAY as BIRTHDAY,emp.DEPT as DEPTfrom E:/txt/DEPARTMENT.txt as deptjoin  E:/txt/EMPLOYEE.txt empon  dept.MANAGER=emp.EIDwhereemp.BIRTHDAY=(select   max(BIRTHDAY)from ( select emp1.BIRTHDAY as BIRTHDAYfrom E:/txt/DEPARTMENT.txt as   dept1join E:/txt/EMPLOYEE.txt as   emp1on  dept1.MANAGER=emp1.EID))16.   公用表表达式使用SQL的with子句对文本文件中的数据进行计算。示例:从部门数据文件中找出指定部门HR、R&D、Sales,再计算这几个部门女员工人数和平均工资。数据文件同上例。A1$with A   as(select   NAME as DEPT from E:/txt/DEPARTMENT.txtwhere   NAME='HR' or NAME='R&D' or NAME='Sales')select   A.DEPT DEPT,count(*) NUM,avg(B.SALARY) AVG_SALARY fromA left   join E:/txt/EMPLOYEE.txt Bon   A.DEPT=B.DEPTwhere   B.GENDER='F' group by A.DEPT《SPL CookBook》中还有更多敏捷计算示例。

(0)

相关推荐

  • Oracle 外部表

    外部表是指不存在于数据库中的表.通过向Oracle 提供描述外部表的元数据,可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问.外部表是对数据库表的延伸. ...

  • 10个超级棒的Awk命令

    Awk命令是处理数据的强大工具.它获取输入数据,对其进行操作,并在标准输出中给出结果.可以对文件的行和列执行各种操作. 要有效地处理数据,了解"awk"命令的基本要素是非常重要的, ...

  • 大文件上的结构化数据计算示例

    在数据分析过程中,经常会处理文本文件中的结构化数据(txt,csv等),有时这些文件还会很大,计算机内存不足以一次性读入.这时,只能将数据分批读入内存,对每批数据计算出临时中间结果,分批处理完以后,再 ...

  • SpringBoot 多文件上传、携带参数

    参考文章: https://stackoverflow.com/questions/36005436/the-request-was-rejected-because-no-multipart-bou ...

  • sql server 游标示例

    ---游标更新删除当前数据 ---1.声明游标 declare TicketCodeLot cursor scroll for select TICKET_NUMBER,CODE,LOTNUMBER ...

  • PS如何去除拍照文件上的去阴影?

    PS如何去除拍照文件上的去阴影?

  • 文件上传的单元测试怎么写?

    早上有个群友问了一个不错的问题:文件上传的单元测试怎么写?后面也针对后端开发要不要学一下单元测试的话题聊了聊,个人是非常建议后端开发能够学一下单元测试的.所以,今天特地拿出来写一篇说说,并不是因为这有 ...

  • EXCEL技巧,Microsoft Query中让SQL查询能使用单元格作为条件参数[摘录...

    此技巧所完成的效果,可能超出大部分同学的想象.因为除了VBA编程和复杂的数组公式,在excel中不太可能实现这样高级的自动筛选效果: 选取关键字后,可以自动从源表中筛选出结果 源表 筛选效果(动画演示 ...

  • 文件upload 文件上传深入

    我记录这篇文章是因为开发过程中,发现上传业务有时候感觉不同平台自己有时一脸懵逼不知道咋样去优化这块业务,不同的后台实现咋样做不同的处理,以下介绍后台实现主要node和java为主,比如:手机端app图 ...

  • Selenium2+python自动化75-非input文件上传(SendKeys)

    前言 不少小伙伴问非input标签如何上传文档,这个本身就是一坑,无奈很多小伙伴非要跳坑里去,那就介绍一个非主流的上传文件方法吧,用第三方库SendKeys. (本篇基于python2.7版本的,py ...

  • selenium+python自动化77-autoit文件上传

    前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...