SPL vs SQL 栏目下的全部文章

可重复的条件分组

分类:SPL vs SQL

按在公司的工龄将员工分段分组统计每组的男女工人数 分段规则:一年之内、一至三年、三年以上、五年以上 SQL解法 with A as (select 1 序号,’一年以内’ 分段,0 低限,1 高限 from dual union select 2,’一至三年’,1,3 from dual union select …

按指定次序分组

分类:SPL vs SQL

按次序列出研发部、市场部、销售部、商务部、行政部的女员工人数和平均年龄 SQL解法 with A as (select 1 序号, ‘研发部’ 部门 from dual union select 2, ‘销售部’ from dual union select 3, ‘商务部’ from dual union …

按指定次序排序

分类:SPL vs SQL

根据月度销售额表计算每次第一个月比上季同月的增长额,有些月可能无数据。 SQL解法 with M as (select 1 月 from dual union select 4 from dual union select 7 from dual union select 10 from dual) select 月, 销售额,销售额-LAG(销售额 …

连续区间的比上期

分类:SPL vs SQL

某支股票最长连续涨了多少交易日 SQL解法 select max(连续日数) from (select count(*) 连续日数 from (select sum(涨跌标志) over(order by 交易日) 不涨日数 from (select 交易日, case when …

针对选出记录计算比上期

分类:SPL vs SQL

某支股票股价最高的那三个交易日及其收盘价和涨幅 SQL解法 select * from (select 交易日,收盘价, 收盘价/lag(收盘价) over(order by 交易日)-1 涨幅 from 股价表 ) where 交易日 IN (select 交易日 from (select 交易日, …

针对累计值过滤

分类:SPL vs SQL

找出销售额占到一半的前n个客户,并按销售额从大到小排序 SQL解法 with A as (select 客户,销售额,row_number() over (order by 销售额) 排名 from 客户销售表) select 客户,销售额 from (select 客户,销售额,sum(销售额) over (order by …

使用位置选出子集

分类:SPL vs SQL

将学生按成绩蛇行分作两班,即1、4、5、8、…为一班,2、3、6、7、…为二班 SQL解法 一班 select 姓名,成绩 from (select 姓名,成绩, row_number() over(order by绩 desc) 排名 from 成绩表) where mod(排名,4)=0 or mod(排名,4)=1 orde …

中位数

分类:SPL vs SQL

全公司年龄排名居中的员工 SQL解法 select 姓名,出生日期 from (select 姓名,出生日期, row_number() over (order by 出生日期) 排名 from 员工表 ) where 排名=(select floor((count(*)+1)/2) from 员工表) SQL的集合无序,需要专 …

找出最大值和最小值所在记录

分类:SPL vs SQL

最年长和最年轻的员工入职相距多少天? SQL解法 select (select 入职日期 from 员工表 where 出生日期=(select min(出生日期) from 员工表)) – (select 入职日期 from 员工表 where 出生日期=(select max(出生日期) from 员工表)) from …

合并不同结构的表运算

分类:SPL vs SQL

正式工和临时工合起来的女工平均年龄,两表的数据结构可能不同 SQL解法 select avg(年龄) from (select 年龄,性别 from 正式工 union all select 年龄,性别 from 临时工) where 性别=’女’ 不同结构的表不能union,需要先用子查询选出结构一致的部 …