esProc 在结构化文本文件上用简单 SQL 查询
esProc在结构化文本文件上用简单SQL查询
结构化文本文件是指以tab分隔的TXT文件或是逗号分隔的csv文件,这类文件可以看成是数据表。使用esProc 中的简单SQL可以方便地应用到这类文件上,避免导入数据库的麻烦。
本文用文本文件举例,但同时也适用于Excel文件,假定文件第一行都是标题。
A |
B |
|
1 |
$select * from scores.txt where |
// filter |
2 |
$select avg(Chinese),max(Math),sum(English) from scores.txt |
// aggregation |
3 |
$select *,English+Chinese+Math as total_score from scores.txt |
// compute column |
4 |
$select *, case when English>=60 then 'Pass' else 'Fail' end as English_evaluation from scores.txt |
// case |
5 |
$select * from scores.txt order by CLASS,English+Chinese+Math desc |
// sort |
6 |
$select top 3 * from scores.txt order by English desc |
// top-N |
7 |
$select CLASS,min(English),max(Chinese),sum(Math) from scores.txt group by CLASS |
// group aggregation |
8 |
$select CLASS,avg(English) as avg_En from scores.txt group by CLASS having avg(English)<85 |
// group filter |
9 |
$select distinct CLASS from scores.txt |
// distinct |
10 |
$select count(distinct CLASS) from scores.txt |
// count distinct |
11 |
$select CLASS,count(distinct English) as num_de from scores.txt group by CLASS |
// group count distinct |
12 |
||
13 |
$select sum(S.quantity*P.Price) as total from sales.csv as S join product.csv as P on S.productid=P.ID where S.quantity<=50 |
// 2 files join |
14 |
$select s.ID,c.cname,p.name,s.Date,s.Quantity,p.Price,c.borth,c.state from sales.csv as s join product.csv as p on s.ProductID=p.ID join customer.txt as c on s.CustomerID=c.cid where c.borth<date("2000-01-01") |
// multiple files join |
15 |
$select s.ID,c.cname,p.name,s.Date,s.Quantity,p.Price,c.state from sales.csv as s |
// subquery |
16 |
$with A as (select cid from customer.txt where state in ('Texas','California','Florida') ) |
// with |
https://try.esproc.com/splx?35K
A1 从学生成绩表scores.txt中筛选出2班的学生成绩,文件中第一行是列名,第二行开始是数据,如下图所示。
A2 计算学生成绩表中全体学生的语文平均分、数学最高分、英语总分。
A3 计算学生成绩表中每位学生的总分。
A4 计算学生成绩表中每位同学的英语成绩是否及格。
A5 将学生成绩表按照班号升序、总分降序的顺序排列。
A6 查看英语成绩最高的3个同学成绩。
A7 查询各班的英语最低分、语文最高分、数学总分。
A8 找出英语平均分低于85分的班级。
A9 查询所有班级编号。
A10 统计共有多少个不同编号的班级。
A11 按班级分组,统计各班英语成绩不重复的个数。
A13 销售信息和产品信息分别存储在两个csv文件中,计算每单销售数量小于50产品的总销售额。
A14 多个文件关联查询,查询出生日期小于2000-01-01顾客的订单信息。
A15 多个文件关联查询,并用子查询结果作为过滤条件,查询最年轻顾客的订单信息。
A16 with子句,查询指定州顾客中,每种产品的订单数量、订单总金额
大佬,简单 sql 读 excel 文件,只能读默认的第一个 Sheet 吧?如果一个工作簿中有多个 Sheet 有数据,能否用简单 sql 读取指定的 Sheet?
英文版
查询 excel 文件中的其它 sheet 也是可以的,写法为:
$select * from {file(“d:/a1.xlsx”).xlsimport@t (;2)}
{} 里是 SPL 定义的表,参数 2 表示第 2 个 sheet
谢谢大佬…这样写以前在论坛文章中见到过,因为读取数据很慢,没把{file.xlsimport@t ()}这种方法当回事,彻底忘记了。
哎,只要跟 excel 扯上关系都不会快。多 sheet 的工作簿还是把工作簿当数据库来连算了,虽然也很慢。