【牛客刷题-SQL】SQL3 查询结果去重

1. SQL3 查询结果去重

🤵‍♂️ 个人主页: Redamancy_06
📒 系列专栏:《在线编程-SQL篇》
🌐推荐一款找工作神器网站:《牛客网练习入口》|笔试题库|面试经验|实习招聘内推|
🌍 无论是面试,还是刷题学习,都非常好用。而且调试在线编程题时,是可以对比测试数据对应的正确输出的。
🐋 希望大家多多支持😘一起进步呀!
📝 如果文章对你有帮助的话,欢迎评论 💬点赞 👍收藏 📂加关注

在这里插入图片描述

1.1描述

题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。

1.2示例:user_profile

iddevice_idgenderageuniversityprovince
12138male21北京大学Beijing
23214male复旦大学Shanghai
36543female20北京大学Beijing
42315female23浙江大学ZheJiang
55432male25山东大学Shandong

根据示例,你的查询应返回以下结果:

university
北京大学
复旦大学
浙江大学
山东大学

1.3示例1

输入:

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`province` varchar(32)  NOT NULL);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai');
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang');
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong');

输出:

北京大学
复旦大学
浙江大学
山东大学

1.3该题考察DISTINCT语句

1.3.1 DISTINCT 的作用

在MySQLl中,DISTINCT关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,DISTINCT只可以在SELECT中使用

1.3.2 DISTINCT 的用法

SELECT DISTINCT expression[,expression...]
FROM tables 
[where conditions];

在使用distinct的过程中主要注意一下几点:

  1. 在对字段进行去重的时候,要保证DISTINCT在所有字段的最前面
  2. 如果DISTINCT关键字后面有多个字段时,则会对多个字段进行组合去重,只有多个字段组合起来的值是相等的才会被去重

1.3.3 DISTINCT 的原理

DISTINCT 进行去重的主要原理是通过先对要进行去重的数据进行分组操作,然后从分组后的每组数据中去一条返回给客户端,在这个分组的过程可能会出现两种不同的情况:

  1. DISTINCT 依赖的字段未全部包含索引:
    该情况由于索引不能满足整个去重分组的过程,所以需要用到临时表,MySQL 首先需要将满足条件的数据放到临时表中,然后在临时表中对该部分数据进行分组,然后从临时表中每个分组的数据中去一条数据,在临时表中进行分组的过程中不会对数据进行排序。

  2. DISTINCT 依赖的字段全部包含索引:
    该情况 MySQL 直接通过操作索引对满足条件的数据进行分组,然后从分组后的每组数据中去一条数据。

在这里插入图片描述

1.4题解

SELECT DISTINCT university
FROM user_profile

SQL是一种简单的语言,但实践才是最好的学习方式;因为简单,所以上手快;因此是语言,索引需要实践。“纸上谈来终觉浅”,学习一门编程语言,最重要的还是要亲手编程,这个题单正是使用这种手把手指导的方式,教会你亲手编写SQL代码,让你实现从萌新到大佬的跨越。
点击链接赶紧练习起来吧:https://www.nowcoder.com/link/pc_csdncpt_red_sql

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redamancy_06

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值