当前位置: 首页 > article >正文

2.16 sql去重查询(DISTINCT)

2.16 去重查询DISTINCT在电商数据分析中你几乎每天都会遇到“去重”场景统计独立访客数UV不是页面浏览量PV。统计实际下单用户数不是订单数。统计成交省份数量不是订单条数。统计购买过某类商品的用户数。DISTINCT就是专门用来去重的关键字。这一章我会带你彻底搞懂DISTINCT的用法单字段去重、多字段联合去重、与聚合函数配合。学完之后你就能精准统计独立用户、独立商品等核心指标。学习前准备已完成MySQL安装参考系列前几章已安装DBeaver或Navicat准备一个练习数据库比如distinct_demo学习前环境准备步骤1确保MySQL服务已启动。步骤2创建练习数据库和表并插入示例数据。CREATEDATABASEdistinct_demoCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;USEdistinct_demo;-- 订单表包含重复用户、重复商品、重复省份CREATETABLEorders(order_idVARCHAR(50)PRIMARYKEY,user_idINTNOTNULL,product_idINTNOTNULL,provinceVARCHAR(20),amountDECIMAL(10,2));INSERTINTOordersVALUES(ORD001,1001,101,广东,299.00),(ORD002,1001,102,广东,189.00),-- 同一用户不同商品(ORD003,1002,101,北京,599.00),(ORD004,1003,103,上海,399.00),(ORD005,1002,104,北京,99.00);-- 同一用户另一订单DISTINCT基础认知DISTINCT关键字用于去除查询结果中的重复行只保留唯一的组合。基本语法SELECTDISTINCT列名FROM表名;核心执行逻辑数据库先按照SELECT的列组合进行分组然后每组只返回一行。在电商数据分析中的核心用途统计独立用户数去重后的用户ID。统计成交省份数去重后的省份。统计购买过某商品的用户数。组合去重比如统计每个用户-商品对用于复购分析。我的踩坑经历第一次用DISTINCT时我写SELECT DISTINCT user_id, amount FROM orders以为会按user_id去重结果发现它是对(user_id, amount)组合去重。如果同一用户有两个不同金额的订单两条都会保留。DISTINCT作用于后面所有列的组合不是只作用于第一列。单字段去重4.1 基础语法SELECTDISTINCT字段名FROM表名;4.2 电商实操案例案例一统计有多少个用户下过单SELECTDISTINCTuser_idFROMorders;分步操作先写SELECT user_id FROM orders看到所有订单对应的用户ID有重复。加上DISTINCT再次执行只返回唯一的用户ID。如果需要计数可以用COUNT(DISTINCT user_id)后面会讲。预期结果返回1001、1002、1003三行。案例二统计成交省份有哪些SELECTDISTINCTprovinceFROMorders;预期结果广东、北京、上海。案例三统计商品表中不重复的类目-- 创建商品表CREATETABLEproducts(product_idINTPRIMARYKEY,categoryVARCHAR(20));INSERTINTOproductsVALUES(101,女装),(102,女装),(103,男装),(104,童装);SELECTDISTINCTcategoryFROMproducts;预期结果女装、男装、童装。4.3 避坑提醒DISTINCT对NULL值处理多个NULL会被视为相同只保留一个NULL。不要滥用DISTINCT。如果数据本身已经唯一如订单号加DISTINCT反而会增加排序开销。实操避坑提醒如果你发现SELECT DISTINCT结果比预期少检查是不是某些字段有NULL值。例如province列为NULL的订单去重后只会显示一行NULL。多字段联合去重5.1 基础语法SELECTDISTINCT字段1,字段2FROM表名;DISTINCT作用于后面所有字段的组合只有所有字段的值都相同才会被去重。5.2 电商实操案例案例一统计每个用户购买过的不同商品SELECTDISTINCTuser_id,product_idFROMorders;分步操作先查询SELECT user_id, product_id FROM orders看到所有组合可能有重复。加上DISTINCT去除完全相同的(user_id, product_id)对。预期结果用户1001买过101和102两条1002买过101和104两条1003买过103一条。不会出现重复的组合。案例二统计每个订单状态在不同省份的出现情况假设有状态字段-- 加一个order_status字段演示ALTERTABLEordersADDorder_statusVARCHAR(10)DEFAULT已支付;UPDATEordersSETorder_status已支付WHEREorder_idIN(ORD001,ORD003,ORD004,ORD005);UPDATEordersSETorder_status已取消WHEREorder_idORD002;SELECTDISTINCTorder_status,provinceFROMorders;预期结果(已支付,广东)、(已取消,广东)、(已支付,北京)、(已支付,上海)等。案例三复购分析——找出重复购买的用户-商品对先找出所有用户-商品组合去重后如果某个组合出现两次说明复购。这里用分组聚合更好但DISTINCT可先列出所有唯一组合。SELECTDISTINCTuser_id,product_idFROMordersORDERBYuser_id;5.3 避坑提醒多字段联合去重时所有字段的值都相同才会被去重。如果只想对某个字段去重同时返回其他字段DISTINCT做不到。例如“每个用户最新的一条订单”需要用到窗口函数或子查询。我的踩坑经历我曾试图用SELECT DISTINCT user_id, amount来获取每个用户的某个金额结果因为金额不同同一用户出现了多条。后来才明白DISTINCT不是“按第一列去重”而是按所有列组合去重。DISTINCT与聚合函数的配合6.1 COUNT(DISTINCT …)用法统计去重后的数量是最常用的组合。语法SELECTCOUNT(DISTINCT字段)FROM表名;6.2 电商实操案例案例一统计独立下单用户数SELECTCOUNT(DISTINCTuser_id)ASunique_usersFROMorders;预期结果3用户1001、1002、1003。案例二统计成交省份数量SELECTCOUNT(DISTINCTprovince)ASprovince_countFROMorders;预期结果3广东、北京、上海。案例三统计每个商品的购买用户数需结合GROUP BYSELECTproduct_id,COUNT(DISTINCTuser_id)ASuser_cntFROMordersGROUPBYproduct_id;预期结果product_id101用户1001、1002 → 2product_id102用户1001 → 1product_id103用户1003 → 1product_id104用户1002 → 1案例四统计不同用户购买的总金额演示用法实际意义不大-- 计算每个用户的总金额不用DISTINCT用SUM GROUP BYSELECTuser_id,SUM(amount)FROMordersGROUPBYuser_id;-- 如果要统计所有用户的总金额之和每个用户不管多少单只取最大金额很少用-- 这里只是展示语法SELECTSUM(DISTINCTamount)FROMorders;-- 对金额去重求和实际意义不大6.3 避坑提醒COUNT(DISTINCT column)中的列不能是*必须是具体列。MySQL不支持COUNT(DISTINCT col1, col2)要统计多列组合的唯一数量可用子查询-- 统计用户-商品组合的数量SELECTCOUNT(*)FROM(SELECTDISTINCTuser_id,product_idFROMorders)ASt;我的踩坑经历我写过COUNT(DISTINCT user_id, product_id)在MySQL中报错。后来改成子查询才解决。MySQL的COUNT DISTINCT只支持单列。综合实操案例服饰类目店铺月度活跃用户与复购分析7.1 案例背景某服饰类目店铺需要生成月度运营报表包含以下去重指标本月下单独立用户数去重用户ID。本月成交省份数量。复购用户数下单次数≥2的用户数。每个商品的独立购买用户数。用户-商品组合的唯一数量用于分析购买多样性。7.2 分步操作步骤1创建订单表并插入更丰富的测试数据-- 清空并重新插入数据TRUNCATEorders;INSERTINTOordersVALUES(ORD001,1001,101,广东,299.00),(ORD002,1001,102,广东,189.00),(ORD003,1002,101,北京,599.00),(ORD004,1003,103,上海,399.00),(ORD005,1002,104,北京,99.00),(ORD006,1004,101,浙江,129.00),(ORD007,1004,102,浙江,89.00);步骤2计算独立下单用户数SELECTCOUNT(DISTINCTuser_id)ASunique_buyersFROMorders;预期结果41001,1002,1003,1004。步骤3计算成交省份数量SELECTCOUNT(DISTINCTprovince)ASprovince_countFROMorders;预期结果4广东、北京、上海、浙江。步骤4计算复购用户数下单次数≥2SELECTCOUNT(*)ASrepeat_usersFROM(SELECTuser_id,COUNT(*)ASorder_cntFROMordersGROUPBYuser_idHAVINGorder_cnt2)ASt;预期结果31001,1002,1004。步骤5统计每个商品的独立购买用户数SELECTproduct_id,COUNT(DISTINCTuser_id)ASbuyer_cntFROMordersGROUPBYproduct_idORDERBYproduct_id;预期结果1011001,1002,1004 → 31021001,1004 → 21031003 → 11041002 → 1步骤6统计用户-商品组合的唯一数量SELECTCOUNT(*)ASunique_user_product_pairsFROM(SELECTDISTINCTuser_id,product_idFROMorders)ASt;预期结果7种组合。7.3 合规提示 电商数据合规提示在统计独立用户数时user_id应该是脱敏后的内部ID而不是手机号或邮箱。如果订单表中包含用户手机号绝对不要用DISTINCT phone去重统计因为会暴露用户个人标识。应该使用内部匿名用户ID。本章踩坑清单与合规总结8.1 新手常见踩坑错误原因正确做法SELECT DISTINCT col1, col2误解为只对col1去重不清楚DISTINCT作用于所有列理解DISTINCT是对组合去重COUNT(DISTINCT col1, col2)在MySQL中报错MySQL不支持多列COUNT DISTINCT用子查询或COUNT(DISTINCT CONCAT(...))对已唯一的列加DISTINCT浪费性能确认列唯一时不要加DISTINCT用DISTINCT去重后求和如SUM(DISTINCT amount)业务含义错误通常需SUM不加DISTINCT除非特殊需求忽略NULL值去重结果中NULL只显示一行处理NULL值或过滤掉8.2 性能与使用建议DISTINCT会对结果集排序或哈希去重数据量大时性能较差。建议先通过WHERE条件缩小范围。如果需要去重后还返回其他字段考虑用GROUP BY替代更灵活。示例SELECT user_id, MAX(amount) FROM orders GROUP BY user_id;比SELECT DISTINCT user_id, amount更能满足“每个用户最大金额”的需求。8.3 电商数据合规红线不要对敏感字段手机号、身份证使用DISTINCT因为会查询出明文敏感信息。应使用内部脱敏ID。去重统计结果属于经营数据内部报表分享时注意脱敏不展示具体用户ID。避免通过DISTINCT反向推断用户行为比如某个商品只有极少数用户购买去重后的用户ID列表可能直接定位到个人需控制访问权限。结语DISTINCT是电商数据分析中高频使用的去重工具。掌握单字段去重、多字段联合去重以及与COUNT的配合你就能精准统计独立用户、独立商品等核心指标。有问题的评论区留言我看到会回复。

相关文章:

2.16 sql去重查询(DISTINCT)

2.16 去重查询(DISTINCT) 在电商数据分析中,你几乎每天都会遇到“去重”场景:统计独立访客数(UV),不是页面浏览量(PV)。统计实际下单用户数,不是订单数。统计…...

Enhancing Low-Light Images via Wavelet-Guided Diffusion: A Fast and Robust Approach

1. 为什么微光图像增强需要新思路? 每次在夜间拍摄照片时,最让人头疼的就是画面中那些模糊不清的细节。传统方法要么让暗部区域出现明显噪点,要么导致亮部过曝丢失细节。这个问题在监控摄像头、医疗影像、天文观测等领域尤为突出——我们既需…...

html标签怎么关联标签与控件_label for用法详解【方法】

label 的 for 属性必须严格匹配控件的 id(而非 name),大小写敏感且不可含空格;若未设 for 或未包裹控件,则 label 丧失交互与可访问性功能。label for 属性必须匹配控件的 id,不是 name很多人以为 for 属性…...

OpCore Simplify终极指南:3步快速构建黑苹果EFI配置

OpCore Simplify终极指南:3步快速构建黑苹果EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想在普通PC上运行macOS系统却担心复杂…...

SAP CO模块实战:成本控制范围配置全流程解析(OKKP-Maintain Controlling Area)

1. 成本控制范围配置的核心价值 刚接触SAP CO模块时,我对"成本控制范围"这个概念也是一头雾水。直到参与了一个制造业项目,才真正理解它的重要性。简单来说,成本控制范围就像是你家客厅的智能电表,能精确统计每个区域的…...

Jmeter分布式压测(超详细总结)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是压力测试? 压力测试(Stress Test),也称为强度测试、负载测试,属于性能测试的范畴。 压力…...

Spring Boot 升级后,Hystrix 没了?我找到了这 3 个替代方案

Spring Boot 升级后,Hystrix 没了?我找到了这 3 个替代方案 写在前面 公司项目要从 Spring Boot 2.2.x 升级到 2.7,领导让我负责调研。 拿到手一看,好家伙,Hystrix 停更了?Feign 的 fallback 怎么报错了&am…...

从混凝土到桥梁:手把手教你用Python和LabelImg为裂缝检测任务制作自己的数据集

从混凝土到桥梁:手把手教你用Python和LabelImg为裂缝检测任务制作自己的数据集 在基础设施健康监测领域,裂缝检测一直是计算机视觉技术落地的典型场景。现成的公开数据集虽然提供了便利,但当你的项目遇到特殊材质表面、特定光照条件或非标准拍…...

大模型环境下如何真正“提效”?别让AI成为“高级玩具”

引言 最近两年,大模型(LLM)火得不行,ChatGPT、Claude、文心一言……个个都号称能“颠覆工作方式”。但现实很骨感:很多人兴奋地装上各种AI工具,用了几周后发现——活儿没少干,时间没省下&#…...

2026届最火的五大降重复率神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI开题报告工具是依靠自然语言处理以及学术知识图谱构建起来的,它可以帮助研究者…...

2026最权威的十大AI辅助论文平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek系列论文系统地阐述大型语言模型技术架构、训练范式,核心创新涉及混合专…...

化工GHS标签软件推荐

化工 GHS 可变标签一键打印:告别预印库存,让合规标签随打随用化工行业标签从来不是简单标识,而是安全底线、合规红线、供应链生命线。GHS/CLP 标准、危险象形图、警示词、UN 编码、成分信息、运输标识…… 一张标签要承载数十项数据&#xff…...

2026年金华Google代理商精选,专业服务赢口碑

引言随着全球数字化进程的加速,越来越多的企业开始重视海外市场拓展。在这一过程中,选择合适的Google代理商成为企业成功出海的关键之一。本文将深入分析金华地区的Google代理商市场现状,并推荐几家值得信赖的专业服务商,帮助企业…...

3分钟搞定OFD转PDF:Ofd2Pdf完整使用指南与技巧分享

3分钟搞定OFD转PDF:Ofd2Pdf完整使用指南与技巧分享 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf OFD(开放版式文档)作为中国自主的电子文档格式,在政…...

AI PM | 我做了一个会自己进化的网站

今天早上 6 点,我收到一封邮件。 标题是"SkillForge 每日同步完成",内容很简单:新增 1 个 Skill,质检全部通过,0 个需要人工处理。 我看了一眼就关了。这封邮件我每天都会收到,有时候新增十几个…...

手把手教学:用THE LEATHER ARCHIVE快速生成高级感皮革时尚图片

手把手教学:用THE LEATHER ARCHIVE快速生成高级感皮革时尚图片 关键词:AI时尚设计、皮革穿搭、AI图片生成、时尚杂志风格、一键部署 摘要:本文详细介绍如何使用THE LEATHER ARCHIVE镜像快速生成具有高级感的皮革时尚图片。从环境准备到实际生…...

高端局!追觅电视多项首创技术斩获10+国际国内大奖,实力封神

近期,追觅电视交出亮眼业绩成绩单,全球累计出货、专利申请、国际大奖等多项数据表现突出;同时,品牌集中推出五大全球首创及首发技术,将画质、护眼、动态声擎等可感知创新落地为产品体验,完美呼应“技术业绩…...

BepInEx:如何为Unity游戏打造个性化体验的插件框架

BepInEx:如何为Unity游戏打造个性化体验的插件框架 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 你是否曾经想过为喜欢的Unity游戏添加新功能、修改界面或扩展玩法&a…...

c++如何解析二进制协议中的可选字段逻辑实现及其反序列化【进阶】

二进制协议中判断可选字段存在与否需依赖协议明确定义的存在性编码方式,如前置布尔标志位、长度前缀为0或复用保留位,不可用填零或留空;解析时须严格按协议定位起始偏移、处理对齐,并区分“字段不存在”与“解析失败”。二进制协议…...

2026年制造企业必看!工厂布局规划咨询怎么选才不踩坑?

2026年制造企业必看!工厂布局规划咨询怎么选才不踩坑?2026年,制造行业降本增效竞争愈发激烈,新建工厂投建、老厂扩产升级、流程梳理等需求倒逼企业重视工厂布局规划。但布局不合理导致的空间浪费、动线混乱、成本高企等痛点&#…...

MLX‑VLM :Mac本地跑通多模态大模型的开源项目!让图片、音频、视频理解一键上手

目录 一、MLX‑VLM到底是什么? 二、核心亮点:Mac本地多模态自由 1. 全模态支持:看、听、读全都行 2. 性能拉满:苹果芯片深度优化 1) Qwen3.5‑4B‑4bit(128k 上下文) 2) gemma‑4‑31b‑it&#xff0…...

QT+FastDDS实战:手把手教你搭建ROS2风格通信模块(附避坑指南)

QTFastDDS实战:从零构建工业级通信模块的完整指南 在智能驾驶和机器人开发领域,可靠高效的进程间通信是系统设计的核心挑战。本文将带您深入探索如何将FastDDS深度集成到QT项目中,打造一个兼具ROS2通信风格和工业级稳定性的解决方案。 1. 环境…...

基于 Patroni + etcd + HAProxy 的 PostgreSQL 高可用集群实战指南

1. 为什么需要PostgreSQL高可用集群? 数据库作为现代应用的核心组件,其稳定性直接影响整个系统的可靠性。想象一下电商大促时数据库突然宕机,或者医院系统因数据库故障无法挂号——这些场景对业务连续性要求极高。传统的主从复制方案需要人工…...

抖音批量下载终极指南:5分钟掌握无水印视频采集

抖音批量下载终极指南:5分钟掌握无水印视频采集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

手把手教你用Pollyoyo实现高级图表绘制(含PlantUML和Mermaid教程)

代码驱动图表革命:Pollyoyo深度应用指南 在数据可视化和技术文档编写领域,图表的质量和效率直接影响着信息传递的效果。传统拖拽式绘图工具虽然直观,但对于需要频繁更新、版本控制或批量生成的场景显得力不从心。这正是Pollyoyo这类代码驱动…...

GitHub汉化插件终极指南:3分钟实现GitHub中文界面的完整教程

GitHub汉化插件终极指南:3分钟实现GitHub中文界面的完整教程 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub…...

如何无线地将照片从 iPhone 传输到 PC?

我们经常在 iPhone 上存储大量照片,将它们传输到电脑是备份照片并释放 iPhone 空间的好方法。通常,你会使用 USB 数据线将 iPhone 连接到电脑进行传输。但是,如果你没有 USB 数据线,或者你的电脑无法识别你的 iPhone,该…...

保姆级教程:用Python和OpenCV同时录制RealSense D435i的深度、彩色、红外和IMU数据流

RealSense D435i多模态数据采集实战:从环境配置到自动化脚本的全流程指南 当你第一次拿到RealSense D435i这款强大的深度感知设备时,可能会被它丰富的传感器阵列所震撼——RGB摄像头、立体红外摄像头、深度传感器以及惯性测量单元(IMU)的集成&#xff0c…...

数字孪生赋能智慧校园:三维可视化运维检测平台的创新实践

1. 数字孪生如何重塑智慧校园管理 第一次看到浙江工商大学的数字孪生校园平台时,我完全被震撼到了——整个校园的每栋建筑、每条道路甚至每棵树都以三维形式精确还原在屏幕上,实时数据像血液一样在虚拟校园中流动。这种技术正在彻底改变传统校园管理模式…...

医学影像预处理还有必要吗?从APTOS2019看端到端模型如何‘吃掉’传统步骤

医学影像预处理:从手工优化到端到端学习的范式迁移 在Kaggle APTOS2019糖尿病视网膜病变检测竞赛中,一个有趣的现象引发了计算机视觉领域的讨论:冠亚军团队均未采用传统图像预处理流程。这与2015年同类型竞赛中Ben Graham团队依赖精心设计的预…...