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;