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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

DB2、MySQL去重SQL

發(fā)布時(shí)間:2024/5/8 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DB2、MySQL去重SQL 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

1 分類(lèi)
  • 重復(fù)分兩種。
    • 一是完全重復(fù)的記錄,也即所有字段均重復(fù)的記錄,
    • 二是部分關(guān)鍵字段重復(fù)的記錄,比如Name字段重復(fù),而其他字段不一定重復(fù)或都重復(fù)可以忽略。
2 表數(shù)據(jù)

  • 用戶(hù)辦理套餐的記錄表,可看出,user_id=33333有兩條完全重復(fù)的記錄,user_id=11111的tc_name和open_date不一樣
建表SQL/* 為了方便書(shū)寫(xiě) 筆者本地沒(méi)DB2 用MYSQL應(yīng)付一下 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','動(dòng)感地帶','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、完全重復(fù),使用distinct或group by
-- 1、完全去重 使用distinct--SELECT DISTINCT USER_ID,NAME,TC_NAME,OPEN_DATE FROM DISTINCT_TABLE;-- 2、完全重復(fù) 用group by 該方法也只對(duì)完全重復(fù)的記錄有效--SELECT USER_ID,NAME,TC_NAME,OPEN_DATE FROM DISTINCT_TABLE GROUP BY USER_ID,NAME,TC_NAME,OPEN_DATE;

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

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

-- 僅去掉所有重復(fù) --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() 分等級(jí)之后限定 row=1
-- 3、row_number()over() 分等級(jí)之后限定 row=1 MYSQL語(yǔ)法報(bào)錯(cuò) DB2應(yīng)該可以--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

總結(jié)

以上是生活随笔為你收集整理的DB2、MySQL去重SQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。