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

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

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

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

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

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

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

SQL代碼:

-- 創(chuàng)建測(cè)試表
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)建時(shí)間'
) DEFAULT CHARSET='utf8mb4';
-- 添加測(cè)試數(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ù)計(jì)算aid去重之后的總條數(shù):

SQL代碼:

SELECT COUNT(DISTINCT aid) FROM pageview;

GROUP BY使用

GROUP BY的基礎(chǔ)語法如下:

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)計(jì)每個(gè)aid的總數(shù)量:

SQL代碼:

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

distinct和group by的區(qū)別

查詢結(jié)果集不同

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

使用業(yè)務(wù)場(chǎng)景不同

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

性能不同

如果去重的字段有索引,那么GROUP BYDISTINCT都可以使用索引,此情況下它們的性能是相同的。而當(dāng)去重的字段沒有索引時(shí),DISTINCT的性能可能會(huì)高于GROUP BY,因?yàn)樵贛ySQL 8.0之前,GROUP BY有一個(gè)隱藏的功能會(huì)進(jìn)行默認(rèn)的排序,這樣就會(huì)觸發(fā)filesort從而導(dǎo)致查詢性能降低。

總結(jié)

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

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

相關(guān)文章

  • MySQL可以使用斜線來當(dāng)字段的名字

    MySQL可以使用斜線來當(dāng)字段的名字

    無意中發(fā)現(xiàn)MySQL可以使用斜線來當(dāng)字段的名字,下面有個(gè)示例,需要的朋友可以參考下
    2014-03-03
  • MySQL學(xué)習(xí)(七):Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn)原理詳解

    MySQL學(xué)習(xí)(七):Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 最新評(píng)論

    东乌| 乃东县| 吕梁市| 安仁县| 廊坊市| 夏津县| 饶平县| 同仁县| 旬邑县| 柳江县| 香格里拉县| 宁海县| 博爱县| 防城港市| 从江县| 石景山区| 商洛市| 延长县| 天台县| 长春市| 崇州市| 兖州市| 通山县| 鹰潭市| 海城市| 保亭| 八宿县| 长汀县| 垣曲县| 开封市| 丰顺县| 凤台县| 博客| 奉化市| 大余县| 东乡| 水城县| 镇安县| 延庆县| 沧州市| 公安县|