Oracle 高性能分组排序等关键词

一、分组并给每组排序

select row_number() over(partition by '分组字段' order by '排序字段' desc ) from  '表名';

二、关联两个sql的查询结果

-- union在连接查询的两张表的时候,会自动去除 重复的数据。
-- union all 在连接查询的时候,只是简单的将两张表中的数据进行连接,不会去除重复的数据。
sql1  union sql2;

--例如
select * from test where name like '%张%' 
union 
select * from test where name like '%李%'

建议:单表链接查询的话使用union的效率比连接查询要高。

三、case when 用法

case 
  when sex = '1' then '男'
  when sex = '2' then '女'
else '未知' end

--例如 与 group by 结合
SELECT country, 
  SUM( CASE WHEN sex = '1' THEN  population ELSE 0 END),  --男性人口 
  SUM( CASE WHEN sex = '2' THEN  population ELSE 0 END)   --女性人口
  FROM  Table_A  GROUP BY country; 
-- 与 distinct 结合
select 
  count(distinct case when photo='1'  then id else null end )photo1_count,
  count(distinct case when photo='2'  then id else null end )photo2_count
  from photos;
-- 与 in EXISTS

SELECT keyCol, 
CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )  THEN 'Matched' 
ELSE 'Unmatched' END Label 
FROM tbl_A; 
 
SELECT keyCol, 
CASE WHEN EXISTS ( SELECT * FROM tbl_B  WHERE tbl_A.keyCol = tbl_B.keyCol )  THEN 'Matched'  ELSE 'Unmatched' END Label 
FROM tbl_A; 

四、分组

group by

--例如 查找的字段一定要在group by 后面
select p.project_id  from project p group by p.project_id;

五、排序

order by

--例如
select  * from  test  order by createTime;

六、当记录不存在时 insert,当记录存在时 update
 

---mysql 
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

--Oracle Merge 
MERGE INTO T T1  USING (SELECT '1001' AS a,2 AS b FROM dual) T2  
ON ( T1.a=T2.a)  WHEN MATCHED THEN   
UPDATE SET T1.b = T2.b  WHEN NOT MATCHED 
THEN    INSERT (a,b) VALUES(T2.a,T2.b);  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值