日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

DB2、MySQL去重SQL

發布時間:2024/5/8 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DB2、MySQL去重SQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

X-Dragon版權所有
Email : cnxielong@gmail.com
參考:https://www.cnblogs.com/xuena/p/3912234.html

1 分類
  • 重復分兩種。
    • 一是完全重復的記錄,也即所有字段均重復的記錄,
    • 二是部分關鍵字段重復的記錄,比如Name字段重復,而其他字段不一定重復或都重復可以忽略。
2 表數據

  • 用戶辦理套餐的記錄表,可看出,user_id=33333有兩條完全重復的記錄,user_id=11111的tc_name和open_date不一樣
建表SQL/* 為了方便書寫 筆者本地沒DB2 用MYSQL應付一下 SQLyog Ultimate v12.5.0 (64 bit) MySQL - 8.0.11 ********************************************************************* */ /*!40101 SET NAMES utf8 */;create table `distinct_table` (`USER_ID` varchar (30),`NAME` varchar (30),`TC_NAME` varchar (60),`open_date` date ); CREATE TABLE `distinct` (`USER_ID` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`NAME` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`TC_NAME` varchar(20) DEFAULT NULL,`open_date` date DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8insert into `distinct_table` (`USER_ID`, `NAME`, `TC_NAME`, `open_date`) values('11111','1','動感地帶','2013-07-01'); insert into `distinct_table` (`USER_ID`, `NAME`, `TC_NAME`, `open_date`) values('11111','1','全球通','2014-06-08'); insert into `distinct_table` (`USER_ID`, `NAME`, `TC_NAME`, `open_date`) values('22222','2','神州行','2014-03-01'); insert into `distinct_table` (`USER_ID`, `NAME`, `TC_NAME`, `open_date`) values('33333','3','全球通','2013-02-01'); insert into `distinct_table` (`USER_ID`, `NAME`, `TC_NAME`, `open_date`) values('33333','3','全球通','2013-02-01');
3 去重SQL
1、完全重復,使用distinct或group by
-- 1、完全去重 使用distinct--SELECT DISTINCT USER_ID,NAME,TC_NAME,OPEN_DATE FROM DISTINCT_TABLE;-- 2、完全重復 用group by 該方法也只對完全重復的記錄有效--SELECT USER_ID,NAME,TC_NAME,OPEN_DATE FROM DISTINCT_TABLE GROUP BY USER_ID,NAME,TC_NAME,OPEN_DATE;

2、部分重復 max聚合函數
  • 該方法得出的結果如下,對完全重復記錄和部分重復記錄都有效
  • 注:部分重復的記錄要對所有重復字段使用max或min等才有效
-- 3、max等聚合函數 -- SELECT user_id,NAME,MAX(tc_name),MAX(open_date) FROMDISTINCT_TABLE GROUP BYuser_id,NAME

-- 按照USER_ID, NAME區分 去掉所有和部分重復-- SELECTuser_id, NAME, MAX(TC_NAME) AS TC_NAME, MAX(open_date) FROM DISTINCT_TABLE GROUP BY USER_ID, NAME;

-- 僅去掉所有重復 --SELECTMAX(USER_ID), MAX(NAME), MAX(TC_NAME)AS TC_NAME, MAX(OPEN_DATE) AS OPEN_DATEFROM DISTINCT_TABLE GROUP BY USER_ID, NAME,TC_NAME,OPEN_DATE;

3、row_number()over() 分等級之后限定 row=1
-- 3、row_number()over() 分等級之后限定 row=1 MYSQL語法報錯 DB2應該可以--SELECT user_id,NAME,tc_name,open_date FROM ( SELECT user_id,NAME,tc_name,open_date,row_number() over(PARTITION BY user_id ORDER BY open_date DESC) AS ROWFROMDISTINCT_TABLE ) WHERE ROW=1

總結

以上是生活随笔為你收集整理的DB2、MySQL去重SQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。