SPL vs SQL 栏目下的全部文章

逐步完成结果集

分类:SPL vs SQL

每个部门出一对男女员工组成游戏小组 SQL解法 with A as (select 姓名,部门, row_number() over(partition by 部门 order by 1) 序号 from 员工表 WHERE 性别=’男’), B as (select 姓名,部门, row …

针对子表分组

分类:SPL vs SQL

列出员工及其累计工作超过1年的城市数量。 SQL解法 select 姓名,count(*) 城市数 from (select 员工表.姓名 姓名,履历表.城市 城市 from 员工表,履历表 where 员工表.姓名=履历表.姓名 group by 姓名,城市 having sum(工作天数)>=3 …

针对子表查询

分类:SPL vs SQL

列出员工的首份工作公司 SQL解法 用多表连接 select 姓名,公司 首份工作公司 from (select 员工.姓名 姓名,履历表.公司 公司, row_number() over(partition by 履历表.姓名 order by 履历表.开始日期) 工作序号 from 员 …

引用外键指向记录

分类:SPL vs SQL

女经理的男员工们 SQL解法 用多表连接 select A.* from 员工表 A,部门表 B,员工表 C where A.部门=B.部门 and B.经理=C.姓名 and A.性别=’男’ and C.性别=’女’ 用子查询 select * from 员工表 where 部门 in (select 部门 from 部门表 where …

对分组子集做跨行运算

分类:SPL vs SQL

找出发生过连续三交易日涨停(涨幅>=10%)的股票 SQL解法 with A as (select 代码,交易日, 收盘价/lag(收盘价) over(partition by 股票 order by 交易日)-1 涨幅 from 股价表), …

对分组子集排序和过滤

分类:SPL vs SQL

各科成绩都在前10名的学生 SQL解法 select 姓名 from (select 姓名 from (select 姓名,rank() over(partition by 科目 order by 成绩 desc) 名次 from 成绩表) where 名次<=10) group by 姓名 having cou …

从分组子集中选出

分类:SPL vs SQL

每个部门出两名员工 SQL解法 select * from (select 员工表.*, row_number() over(partition by 部门 order by 1) 序号 from 员工表) where 序号<=2 SQL处理从分组子集中再选出的任务需要使用子查询从源集合中再次查询。 SPL解法 …

取出分组子集

分类:SPL vs SQL

公司中与其他人生日相同的员工 SQL解法 select * from 员工表 where to_char(出生日期,’MMDD’) in (select to_char(出生日期,’MMDD’) from 员工表 group by to_char(出生日期,’MMDD’) having count(*)>1) 有时分组的目的是为了获得分组的子 …

对分组结果排序

分类:SPL vs SQL

人数最多和最少的两个部门 SQL解法 select 部门 from (select 部门,row_number() over (order by 人数 desc) 正排名, row_number() over (order by 人数 asc) 倒排名 from (select 部门, count(*) 人数 from 员工表 …

对分组结果过滤

分类:SPL vs SQL

有多少部门的平均年龄超过30岁或有三个以上员工年龄超过40岁 SQL解法 select count(*) from (select 部门 from 员工表 group by 部门 having avg(年龄)>30 or sum( case when 年龄>40 then 1 else 0 end )>3) 分 …