详细分析MySQL中的distinct函数(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. 基础Demo
  • 3. 进阶Demo

前言

该函数主要用于去重,对于细节知识,此文详细补充说明

1. 基本知识

DISTINCT 是一种用于查询结果中去除重复行的关键字

在查询数据库时,可能会得到重复的结果行,但有时只需要这些结果的唯一副本,这时就可以使用 DISTINCT 来过滤结果,确保每行只出现一次

类似如下:

SELECT DISTINCT name FROM students;

关于 DISTINCT 的基本知识和使用情况的详细分析:

  • DISTINCT 关键字紧跟在 SELECT 后面,用于指示要返回唯一值
  • DISTINCT 用于过滤查询结果中的重复行,确保每行只出现一次
  • 使用 DISTINCT 可能会影响查询性能,特别是当查询的列包含大量重复值时。因为数据库需要对结果集进行排序和去重操作,如果可能的话,应该在查询中仅选择需要的列,以减少不必要的计算量。在某些情况下,使用 GROUP BY 也可以达到类似的效果,但它更适用于需要对结果进行聚合的情况

2. 基础Demo

创建两张表格:

CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT
);INSERT INTO students (name, age) VALUES
('Alice', 20),
('Bob', 22),
('Charlie', 21),
('Alice', 20),
('David', 23);

另外一张表格:

CREATE TABLE courses (course_id INT AUTO_INCREMENT PRIMARY KEY,course_name VARCHAR(50),student_id INT,FOREIGN KEY (student_id) REFERENCES students(student_id)
);INSERT INTO courses (course_name, student_id) VALUES
('Math', 1),
('Physics', 2),
('Chemistry', 3),
('Math', 4),
('Biology', 5);
  1. 查询所有学生的姓名和年龄:SELECT DISTINCT name, age FROM students; (注意此处有个Bug,那就是我的Alice 20 是有两条记录的)
    在这里插入图片描述
  2. 查询所有学生的姓名和他们所选的课程:
SELECT s.name, c.course_name
FROM students s
JOIN courses c ON s.student_id = c.student_id;

在这里插入图片描述

  1. 查询每门课程的选课人数:
SELECT course_name, COUNT(student_id) AS num_students
FROM courses
GROUP BY course_name;

在这里插入图片描述

3. 进阶Demo

以上的Demo比较普遍
如果涉及不常规的逻辑:

  1. 使用多个字段进行查重:返回所有不重复的姓名和年龄的组合

(修改数据)
在这里插入图片描述

SELECT DISTINCT name, age
FROM students;

此处截图如下:

在这里插入图片描述

如果此时想获取最大的age可以这么使用:

SELECT GROUP_CONCAT(DISTINCT name), MAX(age) AS age
FROM students
GROUP BY name;

截图如下:

在这里插入图片描述

  1. 处理 NULL 值:在查询中进行特殊处理
    使用 COALESCE() 函数将 NULL 值转换为一个特定的占位符,然后再进行查重
SELECT DISTINCT COALESCE(name, ''), COALESCE(age, 0)
FROM students;
  1. 考虑使用聚合函数:
    如果想要统计每组唯一值的数量,可以结合 COUNT() 函数使用
SELECT name, age, COUNT(*)
FROM students
GROUP BY name, age;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2980345.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络, 2020)用于特征融合层。 官方论文地址:https://arxiv.org…

javaScript中的this 指向

this 指向总结 this 关键字是一个非常重要的语法点。 this 可以用在构造函数之中,表示实例对象。除此之外,this 还可以用在别的场合。但不管是什么场合,this 都有一个共同点:它总是返回一个对象。 关于 this 的指向&#xff0c…

研究发现:90%的Java服务容易第三方漏洞的影响

Datadog最新发布的“2024年DevSecOps状况”报告显示,Java服务在受Datadog最新发布的“2024年DevSecOps状况”报告显示,Java服务在受到第三方漏洞影响方面最为严重。 报告指出,90%的Java服务存在一个或多个严重或高危漏洞,这些漏…

uni打包ios应用

简单写了一个打开蓝牙的 配置一下manifest.json 打开蓝牙 进行云打包 准备好私钥(私钥密码),profile点击打包> 出来一个.ipa文件 用数据线连上ios手机,直接安装到手机 如下: 关于密钥和profile文件的操作使用Appuploader生成…

unity 录制360全景渲染图

1.打开pakcageManager ,选择packages为 unityRegisty,找到unityRecorder插件下载,点击右下角instant安装,如果插件列表为空,检查是否连接网络,重启Unity 2.打开录制面板 3.add recorder 选择ImageSequence …

使用文本到图像模型的一步图像翻译

使用文本到图像模型的一步图像翻译 摘要IntroductionRelated WorkMethod One-Step Image Translation with Text-to-Image Models 摘要 在这项工作中,作者解决了现有条件扩散模型的两个局限性:由于迭代去噪过程导致的推理速度慢以及模型微调对配对数据依…

TDSQL同一个所属Set显示3个备份节点

欢迎关注“数据库运维之道”公众号,一起学习数据库技术! 本期将为大家分享《TDSQL同一个所属Set显示3个备份节点》的处置案例。 关键词:分布式数据库、TDSQL、备份节点 1、问题描述 登录赤兔管理平台,单击左侧导航栏“实例管理/集群管理”…

【笔试强训】牛牛快递

链接:牛牛的快递_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/41b42e7b3c3547e3acf8e90c41d98270?tpId290&tqId39852&ru/exam/oj描述 牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分…

路由引入,路由过滤

拓扑图 1.配置IP地址,R1、R3、R4上使用loopback口模拟业务网段 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 100.1.1.1 24 [AR1-GigabitEthernet0/0/0]int l0 [AR1-LoopBack0]ip add 192.168.0.1 32 [AR1-LoopBack0]int l1 [AR1-LoopBack1]ip add 192.…

金三银四,备战数据结构与经典算法面试

随着春招季节的临近,面试备战成为许多求职者的痛点。如何在激烈的竞争中脱颖而出,成为众多求职者思考的问题。学习Python编程与算法内容,成为面试开发、测试开发等热门岗位的基础。 为了帮助大家更好地应对技术类面试挑战,霍格沃…

【office安装错误1402或1406】

office安装错误1402或1406 错误如图 解决方法 打开autoremove,点击扩展,输入1402,点击搜索 等待修复成功,再尝试安装office 软件每周六选择其他登录方式可以免费使用

初识C++ · 类和对象(中)(2)

前言:上篇文章已经介绍了6个默认成员函数中的3个函数,分别是构造函数,析构函数,拷贝构造函数,本文介绍的是后三个,赋值运算符重载,const成员函数,取地址操纵符重载。 目录​​​​​…

页面加载事件

2.1窗口加载事件 1.window.οnlοadfuction(){} 或者 window.addEventListerner(‘load’,function(){}) doucument.addEventListner(DOMContentLoaded,fuction(){})这个反应更快些

2024商业地产五一劳动节健康大会朋克养生市集活动策划方案

2024商业地产五一劳动节健康大会朋克养生市集(带薪健康 快乐打工主题)活动策划方案 活动策划信息: 方案页码:53页 文件格式:PPT 方案简介: 打工不养生 赚钱养医生 期待已久的五一假期, …

【UE 材质】表面湿润效果

效果 步骤 1. 创建一个材质函数,这里命名为“MF_Weather_Wetness”,打开材质函数添加如下节点 其中输入的默认值分别为: 其中,“Desaturation”节点用于控制饱和度,我们通过给“Fraction”引脚输入一个负值来增加饱和…

​漏电继电器JHOK-ZBLφ150mm 0.03-3A 0.2-2S导轨安装JOSEF约瑟

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电(…

[lesson49]多态的概念和意义

多态的概念和意义 函数重写回顾 父类中被重写的函数依然会继承给子类 子类中重写的函数将覆盖父类中的函数 通过作用域分辨符(::)访问父类中的同名成员 多态的概念和意义 面向对象中期望的行为 根据实际的对象类型判断如何调用重写函数父类指针(引用)指向 父类对象则调用…

早些年间学Erupt

Erupt部署 创建一个SpringBoot项目(此处为2.7.10) 目录结构 demo -- 项目名称 ├── src└── main├── java -- 代码文件目录└── com.example.demo -- 包名└── DemoApplication -- 入口类└── resources -- 资源文件目录└── application.properties -- 配置…

”温江公平红烧兔“ 大声安利小众美食

”温江公平红烧兔“ 昨天正好送客户回温江(送了一筐樱桃,希望不太酸), 师傅跟我说,有好吃的兔子,先不急吃午饭。 本来天气晒 晕车,我想着肯定没胃口。 结果第一份凉粉上来,越吃胃…

UE4网络图片加载库(带内存缓存和磁盘缓存)

UE4网络图片加载库,带内存缓存和磁盘缓存,支持自定义缓存大小,支持蓝图和C++代码调用 1、调用示例 2、对外暴露函数 3、源代码-网络模块 KeImageNet.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreM…