最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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可以這樣寫。
-- 返回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 數(shù)據(jù)恢復(fù)的多種方法匯總

    MySQL 數(shù)據(jù)恢復(fù)的多種方法匯總

    日常工作中,總會(huì)有因手抖、寫錯(cuò)條件、寫錯(cuò)表名、錯(cuò)連生產(chǎn)庫(kù)造成的誤刪庫(kù)表和數(shù)據(jù)的事情發(fā)生。但是,如果每次刪庫(kù)都跑路的話,怕是再也不好找工作了吧!所以,刪庫(kù)跑路不是上上策
    2021-06-06
  • 在MySQL數(shù)據(jù)庫(kù)之間實(shí)現(xiàn)數(shù)據(jù)同步的配置步驟

    在MySQL數(shù)據(jù)庫(kù)之間實(shí)現(xiàn)數(shù)據(jù)同步的配置步驟

    本文介紹了六種常見(jiàn)的MySQL數(shù)據(jù)同步方法,包括主從復(fù)制、雙主復(fù)制、群集復(fù)制、使用第三方工具(如PerconaXtraBackup)和使用MySQLWorkbench進(jìn)行數(shù)據(jù)同步,以及編寫自定義腳本進(jìn)行數(shù)據(jù)同步,每種方法都有其優(yōu)缺點(diǎn),需根據(jù)實(shí)際需求選擇,感興趣的朋友一起看看吧
    2025-02-02
  • Mysql數(shù)據(jù)庫(kù)編碼問(wèn)題 (修改數(shù)據(jù)庫(kù),表,字段編碼為utf8)

    Mysql數(shù)據(jù)庫(kù)編碼問(wèn)題 (修改數(shù)據(jù)庫(kù),表,字段編碼為utf8)

    個(gè)人建議,數(shù)據(jù)庫(kù)字符集盡量使用 utf8(HTML頁(yè)面對(duì)應(yīng)的是utf-8),以使你的數(shù)據(jù)能很順利的實(shí)現(xiàn)遷移
    2011-10-10
  • 兩種mysql對(duì)自增id重新從1排序的方法

    兩種mysql對(duì)自增id重新從1排序的方法

    本文介紹了兩種mysql對(duì)自增id重新從1排序的方法,簡(jiǎn)少了對(duì)于某個(gè)項(xiàng)目初始化數(shù)據(jù)的工作量,感興趣的朋友可以參考下
    2015-07-07
  • 安裝MySQL后include目錄下沒(méi)有找到libmysql.lib

    安裝MySQL后include目錄下沒(méi)有找到libmysql.lib

    安裝了MySQL后,在其安裝目錄下的include文件夾并沒(méi)有找到libmysql.lib,主要原因是在安裝MySQL的時(shí)候,沒(méi)有勾選develop component這一選項(xiàng)造成的
    2014-08-08
  • 一文帶你搞懂MySQL中的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換

    一文帶你搞懂MySQL中的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換

    在mysql中,當(dāng)操作涉及不同類型的數(shù)據(jù)時(shí),會(huì)根據(jù)一定的規(guī)則自動(dòng)進(jìn)行類型轉(zhuǎn)換,本文主要來(lái)和大家聊聊隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換的相關(guān)知識(shí),需要的可以參考一下
    2025-04-04
  • Linux 安裝JDK Tomcat MySQL的教程(使用Mac遠(yuǎn)程訪問(wèn))

    Linux 安裝JDK Tomcat MySQL的教程(使用Mac遠(yuǎn)程訪問(wèn))

    這篇文章主要介紹了Linux 安裝JDK Tomcat MySQL(使用Mac遠(yuǎn)程訪問(wèn)),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • 在win10系統(tǒng)下安裝Mysql 5.7.17圖文教程

    在win10系統(tǒng)下安裝Mysql 5.7.17圖文教程

    因?yàn)橄胍诠倦娔X上安裝Mysql,于是到官網(wǎng)上下載了最新版本的Mysql-5.7.17,其實(shí)安裝方法也很簡(jiǎn)單,下面小編把安裝過(guò)程分享到腳本之家平臺(tái)供大家參考
    2017-03-03
  • 詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法

    詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法

    最近一直在研究mysql的主從同步問(wèn)題,現(xiàn)在網(wǎng)上也有很多資料,現(xiàn)在感覺(jué)寫的都很好(當(dāng)初感覺(jué)寫的很差,是因?yàn)樽约旱念I(lǐng)悟較差),于是想跟大家分享一下自己配置的整個(gè)過(guò)程和經(jīng)驗(yàn)。有需要的朋友歐美可以參考借鑒,感興趣的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • MySQL查詢截取的深入分析

    MySQL查詢截取的深入分析

    這篇文章主要給大家介紹了關(guān)于MySQL查詢截取的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

龙井市| 卓资县| 孝感市| 霍邱县| 阳江市| 泽普县| 兴国县| 巧家县| 北京市| 宁化县| 荆州市| 碌曲县| 科技| 桓台县| 连州市| 大余县| 顺义区| 麻阳| 克东县| 富阳市| 凉城县| 会泽县| 通海县| 德江县| 锦屏县| 施秉县| 介休市| 县级市| 新田县| 夏邑县| 修水县| 凌源市| 黔东| 林芝县| 南靖县| 两当县| 盐津县| 星座| 柘荣县| 潮州市| 彭山县|