oracle的窗体函数&&数据库之间的异同

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 09:34   11   0

employees表

问题:去除重复记录(工种相同的记录即为重复记录),重复记录只留雇佣日期最早的员工的信息(如果工种相同,雇佣日期相同就都留下)。

select t.*,row_number() over(partition by job_id order by hire_date desc) rn from employees t

select * from(select t.*,row_number() over(partition by job_id order by hire_date desc) rn from employees t) where rn=1;

取得工种重复的记录中雇佣日期最早的员工的信息

keep(dense_rank first order by commission_pct) over(partition by department_id )

keep(dense_rank last order by commisssion_pct) over(partition by department_id)

SELECT last_name, department_id, salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Best"
FROM employees
WHERE department_id IN (30, 60)
ORDER BY department_id, salary;


需求:随机数据抽样调查前10条记录

oracle:select * from(select * from employees order by dbms_random.value()) where rownum<10

db2:select * from employees order by rand() fetch first 10 rows only

mysql:select * from employees order by rand() limit 10

sqlserver:select top 10 from(select * from employees order by newid())

空值转换函数以及空值排序:

select first_name,coalesce(manager_id,0) from employees where salary =24000 (通用)

select first_name,nvl(manager_id,0) from employees where salary=24000(oracle特有)

select * from(
select first_name,manager_id,decode(manager_id,null,0,1) as isnull from employees) order by isnull asc

通过控制isnull字段升序,降序来排序

截取字符串函数(常用一定要记牢)

select first_name,substr(first_name,length(first_name)-1) newname from employees order by newname从倒数第二个字符串截取到最后其中length(coal)返回列长度

select first_name,substr(first_name,2,5) newname from employees 从第2个字符串开始截取5个字符串(从1开始)

对于sql server substring(first_name,len(first_name)-2,2)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP