解决了数据问题之后,开始通过数据库查询语句实现一些表数据的导出,以下是本人近段时间学到的一些知识点,对工作成果的一种记录吧!
一、查询重复数据的几种方法
1、使用嵌套查询
select 运单编号 from
(
SELECT 运单编号,count(1)as 数量
from 账单数据
group by 运单编号
)as A
where A.数量>1
结果如下:
原本还在想能不能直接where count(1)>1,后来试了下出错了:
去搜了下发现是 where和count不能这样使用,where 运行顺序在select 之后,排第二,此时还没分组,所以会出错。
然后就开始面对现实,having平常工作过程中不怎么用,去搜了下发现where和having的区别在于,where是在分组前,取符合where条件的行,然后分组。而having子句是筛选满足条件的组,即在分组之后进行过滤数据。
select 运单编号
from 账单数据
group by 运单编号
having count(运单编号) >1
运行结果:
2、使用开窗函数
使用开窗函数,partition by 运单编号:按照运单编号分组,order by 结算重量 desc:组内按结算重量降序排列,相当于临时行号,然后查询临时行号大于1的即是重复数据。
;with cte as
(
select *,
ROW_NUMBER() OVER (PARTITION BY 运单编号 ORDER BY 结算重量 desc) AS rn
from 账单数据
)
select 运单编号
from cte
where cte.rn<>1