欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL去重方法匯總

 更新時間:2022年01月25日 16:44:41   作者:PHP開源社區(qū)  
這篇文章主要給大家分享了SQL去重方法匯總,在使用SQL提數(shù)的時候,常會遇到表內(nèi)有重復(fù)值的時候,比如我們想得到?uv?(獨立訪客),就需要做去重。下面我們就來看看去重都有哪些方法吧

在使用SQL提數(shù)的時候,常會遇到表內(nèi)有重復(fù)值的時候,比如我們想得到 uv (獨立訪客),就需要做去重。

在 MySQL 中通常是使用 distinct group by子句,但在支持窗口函數(shù)的 sql(如Hive SQL、Oracle等等) 中還可以使用 row_number 窗口函數(shù)進(jìn)行去重。

舉個栗子,現(xiàn)有這樣一張表 task:

備注:

  • task_id: 任務(wù)id;
  • order_id: 訂單id;
  • start_time: 開始時間

注意:一個任務(wù)對應(yīng)多條訂單

我們需要求出任務(wù)的總數(shù)量,因為 task_id 并非唯一的,所以需要去重:

distinct

-- 列出 task_id 的所有唯一值(去重后的記錄)

select distinct task_id
from Task;

-- 任務(wù)總數(shù)
select count(distinct task_id) task_num
from Task;


distinct 通常效率較低。它不適合用來展示去重后具體的值,一般與 count 配合用來計算條數(shù)。
distinct 使用中,放在 select 后邊,對后面所有的字段的值統(tǒng)一進(jìn)行去重。比如distinct后面有兩個字段,那么 1,1 和 1,2 這兩條記錄不是重復(fù)值 。

group by

-- 列出 task_id 的所有唯一值(去重后的記錄,null也是值)
-- select task_id
-- from Task
-- group by task_id;

-- 任務(wù)總數(shù)
select count(task_id) task_num
from (select task_id
? ? ? from Task
? ? ? group by task_id) tmp;

row_number

row_number 是窗口函數(shù),語法如下:

row_number() over (partition by <用于分組的字段名> order by <用于組內(nèi)排序的字段名>)
其中partition by 部分可省略。

-- 在支持窗口函數(shù)的 sql 中使用

select count(case when rn=1 then task_id else null end) task_num
from (select task_id
? ? ? ?, row_number() over (partition by task_id order by start_time) rn
? ?from Task) tmp;

此外,再借助一個表 test 來理理 distinct 和 group by 在去重中的使用:

-- 下方的分號;用來分隔行
select distinct user_id
from Test; ? ?-- 返回 1; 2

select distinct user_id, user_type
from Test; ? ?-- 返回1, 1; 1, 2; 2, 1

select user_id
from Test
group by user_id; ? ?-- 返回1; ?2

select user_id, user_type
from Test
group by user_id, user_type; ? ?-- 返回1, 1; 1, 2; 2, 1

select user_id, user_type
from Test
group by user_id; ? ?
-- Hive、Oracle等會報錯,mysql可以這樣寫。
-- 返回1, 1 或 1, 2 ; 2, 1(共兩行)。只會對group by后面的字段去重,就是說最后返回的記錄數(shù)等于上一段sql的記錄數(shù),即2條
-- 沒有放在group by 后面但是在select中放了的字段,只會返回一條記錄(好像通常是第一條,應(yīng)該是沒有規(guī)律的)

到此這篇關(guān)于SQL去重方法匯總的文章就介紹到這了,更多相關(guān)SQL去重方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql執(zhí)行計劃介紹

    mysql執(zhí)行計劃介紹

    下面我簡單講講mysql的執(zhí)行計劃,只列出了一些常見的情況,希望對大家有所幫助
    2013-11-11
  • mysql 8.0.16 壓縮包安裝配置方法圖文教程

    mysql 8.0.16 壓縮包安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.16 壓縮包安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 解決Linux安裝mysql 在/etc下沒有my.cnf的問題

    解決Linux安裝mysql 在/etc下沒有my.cnf的問題

    這篇文章主要介紹了解決Linux安裝mysql 在/etc下沒有my.cnf的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • mysql密碼忘記后如何修改密碼(2022年最新版詳細(xì)教程保姆級)

    mysql密碼忘記后如何修改密碼(2022年最新版詳細(xì)教程保姆級)

    因為長時間不操作mysql而忘記root密碼的朋友估計不在少數(shù),下面這篇文章主要給大家介紹了關(guān)于mysql密碼忘記后如何修改密碼的相關(guān)資料,本教程是2022年最新版詳細(xì)教程保姆級,需要的朋友可以參考下
    2022-04-04
  • Mysql Online DDL的使用詳解

    Mysql Online DDL的使用詳解

    在日常DBA運維過程中,對表結(jié)構(gòu)進(jìn)行變更算是個普遍的需求了。如果操作的對象是個熱表、大表,難免心里一怵,這些DDL操作是否可以直接執(zhí)行,哪些會影響線上讀寫,哪些會影響主從,甚至導(dǎo)致服務(wù)器壓力驟升,本文做了梳理,希望對大家有所幫助。
    2021-05-05
  • mysql8.0.30安裝配置最詳細(xì)教程(windows?64位)

    mysql8.0.30安裝配置最詳細(xì)教程(windows?64位)

    這篇文章主要給大家介紹了關(guān)于windows?64位下mysql8.0.30安裝配置的相關(guān)資料,主要以圖片的形式展示安裝教程x,簡單易懂,小白專屬,需要的朋友可以參考下
    2022-09-09
  • CentOS 7 安裝Percona Server+Mysql

    CentOS 7 安裝Percona Server+Mysql

    這篇文章主要介紹了CentOS 7 安裝Percona Server+Mysql的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • Mysql GROUP BY查詢每組某值最大的一條數(shù)據(jù)

    Mysql GROUP BY查詢每組某值最大的一條數(shù)據(jù)

    這篇文章主要介紹了Mysql GROUP BY查詢每組某值最大的一條數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql判斷字段是否存在的方法

    mysql判斷字段是否存在的方法

    mysql判斷字段是否存在的方法有很多,如使用desc命令、show columns 命令、describe 命令等等,感興趣的朋友可以參考下
    2014-01-01
  • Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解

    Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解

    今天小編就為大家分享一篇關(guān)于Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論