国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL 數據去重:DISTINCT 與 GROUP BY 的全面解析與實戰

數據庫 MySQL
DISTINCT是MySQL中的一個關鍵字,核心作用是從查詢結果中篩選出所有不重復的記錄,它僅關注唯一性,不涉及任何分組邏輯。其語法結構非常簡潔,僅需在SELECT后添加,作用于所有查詢的列(注意:非單個列,而是列的組合)。

引言

MySQL數據庫日常操作中,數據去重是高頻需求。無論是統計唯一用戶數、篩選不重復的商品類別,還是清理冗余數據,都需要選擇合適的去重方式。當前主流的去重手段主要是DISTINCT關鍵字和GROUP BY子句。

對比維度

DISTINCT

GROUP BY

設計目標

單純篩選不重復記錄,無統計需求

按指定列分組,結合聚合函數做統計

作用范圍

作用于SELECT后的所有列(組合去重)

作用于GROUP BY指定的列(分組依據)

聚合函數支持

不支持(若用聚合函數,會對所有去重后記錄整體統計)

必須支持(分組后需通過聚合函數處理每組數據)

結果排序

不保證結果有序(需手動加ORDER BY)

MySQL 5.7 + 默認按分組列升序排序(可關閉)

過濾時機

僅能通過WHERE過濾原始數據

可通過WHERE過濾原始數據,HAVING過濾分組后數據

使用場景

簡單去重(如唯一值查詢)

分組統計(如按類別計數、求和)

基礎概念

DISTINCT:專注去重

DISTINCTMySQL中的一個關鍵字,核心作用是從查詢結果中篩選出所有不重復的記錄,它僅關注唯一性,不涉及任何分組邏輯。其語法結構非常簡潔,僅需在SELECT后添加,作用于所有查詢的列(注意:非單個列,而是列的組合)。

SELECT DISTINCT 列1, 列2, ... 
FROM 表名 
[WHERE 條件];
GROUP BY:基于分組的聚合工具

GROUP BY是一個子句,核心作用是將表中的記錄按照指定列分組,同一組的記錄會被合并,后續可結合聚合函數(如COUNT()SUM())進行統計計算。它的本質是分組 + 聚合,去重只是分組后的一個副作用(當分組列無重復時,每組僅一條記錄)。

SELECT 分組列, 聚合函數(列) 
FROM 表名 
[WHERE 條件] 
GROUP BY 分組列 
[HAVING 分組條件];

偽代碼

場景 1:單純查詢唯一值(無統計)→ 優先用 DISTINCT

當需求僅為獲取某列或多列的不重復值,無任何統計計算時,DISTINCT是最優選擇 —— 語法更簡潔,語義更清晰,避免不必要的分組邏輯。

示例: 查詢user_order表中所有不重復的商品類別 + 用戶ID組合(即同一用戶購買的不同商品):

-- 正確:用DISTINCT直接去重組合列
SELECT DISTINCT user_id, product 
FROM user_order;

-- 錯誤:用GROUP BY雖能實現,但語義冗余(無聚合需求)
SELECT user_id, product 
FROM user_order 
GROUP BY user_id, product;

場景 2:分組統計(如計數、求和)→ 必須用 GROUP BY

當需求涉及按某列分組,統計每組數據時,DISTINCT完全無法替代GROUP BY,因為DISTINCT不支持分組后的聚合計算。

示例 1: 統計每個商品的銷售總量(假設表中新增quantity列記錄單訂單購買數量):

-- 正確:GROUP BY分組+SUM()聚合
SELECT product, SUM(quantity) AS total_sales 
FROM user_order 
GROUP BY product;

-- 錯誤:DISTINCT無法按商品分組統計,只能統計所有去重記錄的總量(無意義)
SELECT DISTINCT product, SUM(quantity) AS total_sales 
FROM user_order;

示例 2: 篩選訂單數大于2的用戶(需先分組統計,再過濾分組結果):

SELECT user_id, COUNT(order_id) AS order_count 
FROM user_order 
GROUP BY user_id 
HAVING COUNT(order_id) > 2; -- HAVING過濾分組后結果,DISTINCT無此能力

場景 3:多列去重 + 整體統計 → 兩者結合或選其一

當需求是先對多列去重,再對去重后的結果做整體統計時,可選擇DISTINCT直接作用于統計函數,或GROUP BY分組后再統計,需結合語義選擇。

示例: 查詢不重復的(用戶ID + 商品)組合數量(即統計用戶購買的不同商品總數):

-- 方案1:DISTINCT作用于COUNT(),簡潔直觀
SELECT COUNT(DISTINCT user_id, product) AS unique_user_product 
FROM user_order;

-- 方案2:GROUP BY分組后再統計分組數,語義稍復雜
SELECT COUNT(*) AS unique_user_product 
FROM (
    SELECT user_id, product 
    FROM user_order 
    GROUP BY user_id, product
) AS temp;

場景 4:大數據量去重 → 結合索引判斷性能

當處理百萬級以上數據時,DISTINCTGROUP BY的性能差異主要取決于是否有合適的索引,而非語法本身。

  • 若查詢列(DISTINCT的列或GROUP BY的列)有聯合索引,兩者都會走索引掃描,性能接近;
  • 若無索引,兩者都需走全表掃描,但GROUP BY可能因分組排序產生額外開銷(MySQL 5.7 + 可通過SET sql_mode = ''關閉默認排序,優化性能)。

示例: 對user_order表的user_id列做去重查詢(數據量100萬條):

-- 1. 無索引時,兩者都走全表掃描,GROUP BY因默認排序更慢
SELECT DISTINCT user_id FROM user_order; -- 耗時約0.8s
SELECT user_id FROM user_order GROUP BY user_id; -- 耗時約1.2s(默認排序)

-- 2. 建立索引后(ALTER TABLE user_order ADD INDEX idx_user_id(user_id)),兩者性能接近
SELECT DISTINCT user_id FROM user_order; -- 耗時約0.1s(索引掃描)
SELECT user_id FROM user_order GROUP BY user_id; -- 耗時約0.12s(索引掃描)

總結:一句話掌握選擇邏輯

通過前文分析,DISTINCTGROUP BY的選擇可總結為一句話:單純去重找DISTINCT,分組統計用GROUP BY;大數據量看索引,冗余列查詢要避免。

  • 當需求是獲取唯一值,無統計時,優先用DISTINCT,語法簡潔、語義清晰;
  • 當需求是按列分組,做統計(計數、求和等)時,必須用GROUP BYDISTINCT無法替代;
  • 性能優化的核心是減少數據處理量:利用索引覆蓋掃描、提前過濾數據、避免無用列,而非糾結于語法本身。
責任編輯:武曉燕 來源: 一安未來
相關推薦

2025-09-29 01:25:00

2023-09-07 13:32:00

MySQL數據庫

2015-08-27 09:30:05

2025-03-27 03:30:00

Web框架組件

2023-11-03 13:41:16

數據技術

2025-05-13 08:21:18

2023-09-21 09:25:53

Python方法

2025-02-17 09:32:18

2010-10-17 02:16:20

業務分析與優化IBM

2009-11-26 13:05:39

VS2003斷點

2024-03-04 10:24:34

布隆過濾器C#代碼

2024-06-13 08:00:00

MySQLMySQLDump數據庫

2021-04-23 08:15:51

Seata XA AT

2025-10-28 03:00:00

2009-10-10 15:06:14

代理服務器

2010-05-26 18:16:31

MySQL數據庫安裝

2023-11-14 14:41:01

數據庫清除

2024-04-12 12:22:39

前端開發網絡請求

2024-03-12 09:50:27

Raft協議KRaft

2010-08-13 09:34:22

紅帽云計算
點贊
收藏

51CTO技術棧公眾號

麻豆精品网站| 国产精品吊钟奶在线| 久久这里只有精品23| 国产精品四虎| 免费毛片在线不卡| 99久久久国产精品美女| 久久66热re国产| 久久精品亚洲麻豆av一区二区| 图片区小说区区亚洲影院| 69久久99精品久久久久婷婷| 亚洲精品97久久| 欧美激情奇米色| 少妇在线看www| 国产视频精品在线| 羞羞答答国产精品www一本| 97操在线视频| 激情综合激情| 欧美日韩亚洲自拍| 色狠狠一区二区三区香蕉| 日韩色性视频| 国产精品午夜一区二区欲梦| 黑人巨大精品欧美一区| 国产精品ⅴa有声小说| 中文国产成人精品久久一| 欧美r级电影| 在线观看污视频| 亚洲精品视频观看| 日本高清视频在线播放| 欧美日韩一区中文字幕| 美女视频在线免费| 精品综合久久久久久97| 天天操夜夜干| 中文在线日韩| 国产一区二区三区在线| 熟妇熟女乱妇乱女网站| 亚洲另类av| 51成人做爰www免费看网站| 男人的天堂亚洲| 国产一区二区在线视频播放| 国产盗摄女厕一区二区三区| 精品国产免费一区二区三区 | 国模精品系列视频| 亚洲一区二区三区小说| 国产精品一区二区免费在线观看| 日本a口亚洲| 97精品伊人久久久大香线蕉| 在线日本欧美| 秋霞在线观看一区二区三区| 久久只有精品| 国产亚洲天堂网| 精品视频黄色| 欧美高清在线视频观看不卡| 99热国产在线中文| 日韩欧美一卡二卡| 亚洲精品自拍网| 成人一区二区在线观看| 国产免费网址| thepron国产精品| 国产精品成人观看视频国产奇米| 日韩精品第一| 欧美午夜电影在线| 九色porny自拍| 成人精品免费网站| 另类av导航| 乱亲女秽乱长久久久| 亚洲综合激情| 成人午夜在线影视| 中文字幕久久一区| 欧美精品videosex牲欧美| 国产日产欧产精品推荐色| 日韩免费av| 国产精品yjizz| 亚洲天堂av综合网| 99精品国产99久久久久久白柏| 激情五月综合网| 日韩三级电影视频| 国产wwwxx| 亚洲影影院av| 亚州av一区二区| 亚洲欧洲综合另类| 亚洲专区视频| 中文视频在线| 黑人中文字幕一区二区三区| 欧美精品久久99久久在免费线| 在线看片日韩| 青梅竹马是消防员在线| 国产亚洲精品美女久久久m| 欧美日韩成人在线一区| 毛片基地黄久久久久久天堂| 国产精品色婷婷在线观看| www.色就是色| 日韩精品999| 日韩欧美中文| 综合久久国产| 日韩一区二区三区免费看| 91久久精品一区二区三| 欧美一区二区三区免费| 日韩亚洲欧美在线| 另类尿喷潮videofree| 蜜桃传媒视频麻豆一区| 中文字幕第一页久久| 777电影在线观看| 亚洲成人久久久| 精品人人人人| 日本成人黄色免费看| 欧美酷刑日本凌虐凌虐| 免费精品视频| 伊人久久一区| 调教在线观看| 精品一二三四区| 国产极品模特精品一二| 欧美一区二区三区婷婷| 日韩精品av| ririsao久久精品一区| 夜色资源站国产www在线视频 | 啊v在线视频| 成人影院在线观看视频| 国产无限制自拍| 日本不卡在线播放| 日本不卡高清视频一区| 久久久久久网站| 欧美色欧美亚洲高清在线视频| 久久综合精品国产一区二区三区| 在线观看视频日韩| 在线人成日本视频| 国产91免费视频| 亚州精品天堂中文字幕| 亚洲丝袜av一区| 日韩av一区在线观看| 亚洲r级在线视频| 国产精品免费视频网站| 国产精品羞羞答答xxdd| 粉嫩一区二区三区四区公司1| 男人天堂999| 欧美一区视久久| 高清日韩av| 国产成人免费视频网站视频社区 | 中文字幕一区二区精品区| 国产网站在线| 精品国产99久久久久久| 国产天堂av| 黄www在线观看| 88国产精品欧美一区二区三区| 五月综合激情日本mⅴ| 激情综合中文娱乐网| 国产福利视频在线| 男人的天堂成人| 日韩精品视频在线播放| 自拍偷拍国产精品| 久久99久久99精品免视看婷婷 | 国产精品久久久久久亚洲毛片| 天天综合精品| 欧美在线首页| 一本综合精品| 成人性视频网站| 日韩视频在线直播| 鲁一鲁一鲁一鲁一av| 国模视频一区二区| 欧美美女黄视频| 国产成人精品一区二三区在线观看| 超碰国产精品一区二页| 亚洲日本va| 性xx色xx综合久久久xx| 综合色中文字幕| 亚洲免费视频一区二区| 91精品在线观看视频| 欧美 国产 精品| 欧美女同网站| 成人亚洲视频| 亚洲精品四区| 日本一区二区不卡视频| 亚洲精品国产电影| 日韩性生活视频| 青青久久aⅴ北条麻妃| 国产欧美日韩综合一区在线观看 | 在线播放国产一区中文字幕剧情欧美 | 97在线看免费观看视频在线观看| 久久久久www| 国产精品成人v| 一区二区在线观| a√天堂在线观看| 日本手机在线视频| 五月天综合婷婷| 激情五月六月婷婷| 欧美性受ⅹ╳╳╳黑人a性爽| 日日骚欧美日韩| 欧美美最猛性xxxxxx| 日本道色综合久久影院| 国产日韩欧美91| 四虎免费在线观看视频| 国产中文字幕在线观看| 精品久久综合| 性久久久久久| 日韩亚洲在线| 天堂精品中文字幕在线| 性感少妇一区| 成人午夜伦理影院| 成年人网站91| 久久国产日本精品| 国产丶欧美丶日本不卡视频|