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

SQL去重方法匯總

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

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

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

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

備注:

  • task_id: 任務(wù)id;
  • order_id: 訂單id;
  • start_time: 開(kāi)始時(shí)間

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

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

distinct

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

select distinct task_id
from Task;

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


distinct 通常效率較低。它不適合用來(lái)展示去重后具體的值,一般與 count 配合用來(lái)計(jì)算條數(shù)。
distinct 使用中,放在 select 后邊,對(duì)后面所有的字段的值統(tǒng)一進(jìn)行去重。比如distinct后面有兩個(gè)字段,那么 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ù),語(yǔ)法如下:

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;

此外,再借助一個(gè)表 test 來(lái)理理 distinct 和 group by 在去重中的使用:

-- 下方的分號(hào);用來(lái)分隔行
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等會(huì)報(bào)錯(cuò),mysql可以這樣寫(xiě)。
-- 返回1, 1 或 1, 2 ; 2, 1(共兩行)。只會(huì)對(duì)group by后面的字段去重,就是說(shuō)最后返回的記錄數(shù)等于上一段sql的記錄數(shù),即2條
-- 沒(méi)有放在group by 后面但是在select中放了的字段,只會(huì)返回一條記錄(好像通常是第一條,應(yīng)該是沒(méi)有規(guī)律的)

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

相關(guān)文章

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

    mysql執(zhí)行計(jì)劃介紹

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

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

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

    解決Linux安裝mysql 在/etc下沒(méi)有my.cnf的問(wèn)題

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

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

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

    Mysql Online DDL的使用詳解

    在日常DBA運(yùn)維過(guò)程中,對(duì)表結(jié)構(gòu)進(jìn)行變更算是個(gè)普遍的需求了。如果操作的對(duì)象是個(gè)熱表、大表,難免心里一怵,這些DDL操作是否可以直接執(zhí)行,哪些會(huì)影響線上讀寫(xiě),哪些會(huì)影響主從,甚至導(dǎo)致服務(wù)器壓力驟升,本文做了梳理,希望對(duì)大家有所幫助。
    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,簡(jiǎn)單易懂,小白專(zhuān)屬,需要的朋友可以參考下
    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ù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql判斷字段是否存在的方法

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

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

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

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

最新評(píng)論