☆☆☆★☆☆☆

唯有努力才能活成自己想要活成的样子

导航

sql记录

 sql  查询重复数据

select * from 数据表 WHERE 重复记录字段 in ( select 重复记录字段 from  数据表 group by 重复记录字段 having count(重复记录字段)>1)
select temp.name, count(1)as num from table temp group BY temp.c_no where num>1

row_number() OVER ( PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).

row_number()rownum差不多,功能更强一点(可以在各个分组内从1开时排序).

rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的.
lag(arg1,arg2,arg3):
  arg1是从其他行返回的表达式
  arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,是一个往回检索以前的行的数目。
  arg3是在arg2表示的数目超出了分组的范围时返回的值。

lag()lead()区别

  语法:
    lag(EXPR,<OFFSET>,<DEFAULT>) OVER ( [query_partition_clause] order_by_clause )
    LEAD(EXPR,<OFFSET>,<DEFAULT>) OVER ( [query_partition_clause] order_by_clause )
  功能:
    表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)
    lead () 下一个值 lag() 上一个值
---查询所有姓名,如果同名,则按年龄降序
SELECT NAME ,AGE,DETAILS,ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY AGE DESC) FROM TABLE_NAME;
---跳跃排序
SELECT NAME ,AGE,DETAILS , RANK() OVER (PARTITION BY NAME ORDER BY AGE DESC) FROM TABLE_NAME;

ORACLE查询n条数据

SELECT * FROM tablename WHERE ROWNUM <10;

ORACLE 查询第m条到第n条数据

SELECT * FROM(SELECT 表名.*, ROWNUM TT FROM 表名 WHERE ROWNUM <= N AND)WHERE TT >=M;

 sum(x) over( partition by y ORDER BY z ) 分析

  sum(...) over( ),对所有行求和

  sum(...) over( order by ... ),和 = 第一行 到 与当前行同序号行的最后一行的所有值求和

SELECT a,b,c,
sum(c) over(order by b) sum1,--有排序,求和当前行所在顺序号的C列所有值
sum(c) over() sum2--无排序,求和 C列所有值

  sum(...) over( partition by... ),同组内所行求和

  sum(...) over( partition by... order by ... ),同第1点中的排序求和原理,只是范围限制在组内

SELECT a,b,c,sum(c) over( partition by b ) partition_sum,
sum(c) over( partition by b order by a desc) partition_order_sum
  FROM aa;

 把一张表的查询结果直接生成并导入一张新表中,B表不存在

create table B as select * from A

有两个表A和B

--把A表的全部字段数据插入到B表中:
insert into B select * from A;
--把A表中某些字段的数据插入B表中:
insert into B(字段名)(select 字段名 from A)
--不同一个schema下请在表名前加上schema:
insert into b.B select * from a.A

 聚合函数(字符串连接聚合函数)

select t.C_DATE, LISTAGG(ID, ',') WITHIN GROUP (ORDER BY C_DATE) AS d from INFO_TABLE t WHERE t.C_DATE >= 20220509 group by C_DATE;

 

posted on 2020-08-18 15:49  Yr-Zhang  阅读(102)  评论(0编辑  收藏  举报