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

MySQL中distinct和group by去重的區(qū)別解析

 更新時間:2025年01月03日 10:39:40   作者:繁川  
在MySQL中,我們經(jīng)常需要對查詢結(jié)果進行去重,而DISTINCT和GROUP BY是實現(xiàn)這一功能的兩種常見方法,這篇文章主要介紹了MySQL中distinct和group by去重的區(qū)別,需要的朋友可以參考下

MySQL中distinct和group by去重的區(qū)別

在MySQL中,我們經(jīng)常需要對查詢結(jié)果進行去重,而DISTINCTGROUP BY是實現(xiàn)這一功能的兩種常見方法。雖然它們在很多情況下可以互換使用,但它們之間還是存在一些差異的。接下來,我們將通過創(chuàng)建測試數(shù)據(jù)和執(zhí)行不同的查詢來探討這兩種方法的區(qū)別。

創(chuàng)建測試數(shù)據(jù)

首先,我們創(chuàng)建一個測試表pageview,并插入一些數(shù)據(jù):

SQL代碼:

-- 創(chuàng)建測試表
DROP TABLE IF EXISTS pageview;
CREATE TABLE pageview (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '自增主鍵',
    aid BIGINT NOT NULL COMMENT '文章ID',
    uid BIGINT NOT NULL COMMENT '(訪問)用戶ID',
    createtime DATETIME DEFAULT NOW() COMMENT '創(chuàng)建時間'
) DEFAULT CHARSET='utf8mb4';
-- 添加測試數(shù)據(jù)
INSERT INTO pageview(aid, uid) VALUES(1, 1);
INSERT INTO pageview(aid, uid) VALUES(1, 1);
INSERT INTO pageview(aid, uid) VALUES(2, 1);
INSERT INTO pageview(aid, uid) VALUES(2, 2);

DISTINCT使用

DISTINCT的基本語法如下:

SELECT DISTINCT column_name, column_name FROM table_name;

單列去重

根據(jù)aid(文章ID)去重:

SQL代碼:

SELECT DISTINCT aid FROM pageview;

多列去重

根據(jù)aiduid聯(lián)合去重:

SQL代碼:

SELECT DISTINCT aid, uid FROM pageview;

聚合函數(shù)+去重

使用DISTINCT+聚合函數(shù)計算aid去重之后的總條數(shù):

SQL代碼:

SELECT COUNT(DISTINCT aid) FROM pageview;

GROUP BY使用

GROUP BY的基礎語法如下:

SELECT column_name, column_name FROM table_name 
GROUP BY column_name;

單列去重

根據(jù)aid去重:

SQL代碼:

SELECT aid FROM pageview GROUP BY aid;

DISTINCT相比,GROUP BY可以顯示更多的列,而DISTINCT只能展示去重的列。

多列去重

根據(jù)aiduid聯(lián)合去重:

SQL代碼:

SELECT aid, uid FROM pageview GROUP BY aid, uid;

聚合函數(shù) + GROUP BY

統(tǒng)計每個aid的總數(shù)量:

SQL代碼:

SELECT aid, COUNT(*) FROM pageview GROUP BY aid;

distinct和group by的區(qū)別

查詢結(jié)果集不同

使用DISTINCT去重時,查詢結(jié)果集中只有去重列信息。而使用GROUP BY可以查詢一個或多個字段。

使用業(yè)務場景不同

統(tǒng)計去重之后的總數(shù)量需要使用DISTINCT,而統(tǒng)計分組明細或在分組明細的基礎上添加查詢條件時,就得使用GROUP BY。

性能不同

如果去重的字段有索引,那么GROUP BYDISTINCT都可以使用索引,此情況下它們的性能是相同的。而當去重的字段沒有索引時,DISTINCT的性能可能會高于GROUP BY,因為在MySQL 8.0之前,GROUP BY有一個隱藏的功能會進行默認的排序,這樣就會觸發(fā)filesort從而導致查詢性能降低。

總結(jié)

大部分場景下DISTINCT是特殊的GROUP BY,但二者也有細微的區(qū)別,比如它們在查詢結(jié)果集上、使用的具體業(yè)務場景上,以及性能上都是不同的。了解這些差異可以幫助我們根據(jù)實際需求選擇更合適的方法。

到此這篇關(guān)于MySQL中distinct和group by去重的區(qū)別的文章就介紹到這了,更多相關(guān)MySQL distinct和group by去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL實現(xiàn)時間序列錯位還原案列

    SQL實現(xiàn)時間序列錯位還原案列

    這篇文章小編主要向大家介紹的是時間序列錯位還原之SQL實現(xiàn)案例詳解的相關(guān)資料,需要的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09
  • 詳解mysql數(shù)據(jù)去重的三種方式

    詳解mysql數(shù)據(jù)去重的三種方式

    本文主要介紹了mysql數(shù)據(jù)去重的三種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Finished with error:Navicat運行SQL文件報錯的解決

    Finished with error:Navicat運行SQL文件報錯的解決

    這篇文章主要介紹了Finished with error:Navicat運行SQL文件報錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MySQL?WHERE語句用法小結(jié)

    MySQL?WHERE語句用法小結(jié)

    給定一條SQL,如何提取其中的where條件,where條件中的每個子條件,在SQL執(zhí)行的過程中有分別起著什么樣的作用,本文就來介紹一下MySQL?WHERE?條件語句用法小結(jié),感興趣的可以了解一下
    2024-01-01
  • MySQL通用表空間的幾個選項使用指南

    MySQL通用表空間的幾個選項使用指南

    在?MySQL?數(shù)據(jù)庫中有效管理存儲和性能至關(guān)重要,通用表空間為實現(xiàn)這一目標提供了靈活性,本文討論通用表空間并探討其功能、優(yōu)點和實際用法,并附有說明性示例
    2024-01-01
  • 詳解數(shù)據(jù)庫varchar與char有哪些區(qū)別

    詳解數(shù)據(jù)庫varchar與char有哪些區(qū)別

    CHAR和VARCHAR是MySQL中兩種最重要的字符串類型,兩者的原理和區(qū)別也是面試中高頻問題,如果是你,會從哪幾個角度去回答這個問題呢?今天,我給大家總結(jié)了一下相關(guān)知識點,感興趣的朋友一起看看吧
    2023-10-10
  • mysql字段為NULL索引是否會失效實例詳解

    mysql字段為NULL索引是否會失效實例詳解

    有很多人對null值是否走索引感覺很疑惑,所以下面這篇文章主要給大家介紹了關(guān)于mysql字段為NULL索引是否會失效的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 最新評論