♂️ 个人主页: Redamancy_06
系列专栏:《在线编程-SQL篇》
推荐一款找工作神器网站:《牛客网练习入口》|笔试题库|面试经验|实习招聘内推|
无论是面试,还是刷题学习,都非常好用。而且调试在线编程题时,是可以对比测试数据对应的正确输出的。
希望大家多多支持一起进步呀!
如果文章对你有帮助的话,欢迎评论 点赞 收藏 加关注
题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。
id | device_id | gender | age | university | province |
---|---|---|---|---|---|
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据示例,你的查询应返回以下结果:
university |
---|
北京大学 |
复旦大学 |
浙江大学 |
山东大学 |
输入:
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');
输出:
北京大学
复旦大学
浙江大学
山东大学
在MySQLl中,DISTINCT
关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,DISTINCT
只可以在SELECT
中使用
SELECT DISTINCT expression[,expression...]
FROM tables
[where conditions];
在使用distinct的过程中主要注意一下几点:
DISTINCT 进行去重的主要原理是通过先对要进行去重的数据进行分组操作,然后从分组后的每组数据中去一条返回给客户端,在这个分组的过程可能会出现两种不同的情况:
DISTINCT 依赖的字段未全部包含索引:
该情况由于索引不能满足整个去重分组的过程,所以需要用到临时表,MySQL 首先需要将满足条件的数据放到临时表中,然后在临时表中对该部分数据进行分组,然后从临时表中每个分组的数据中去一条数据,在临时表中进行分组的过程中不会对数据进行排序。
DISTINCT 依赖的字段全部包含索引:
该情况 MySQL 直接通过操作索引对满足条件的数据进行分组,然后从分组后的每组数据中去一条数据。
SELECT DISTINCT university
FROM user_profile
SQL是一种简单的语言,但实践才是最好的学习方式;因为简单,所以上手快;因此是语言,索引需要实践。“纸上谈来终觉浅”,学习一门编程语言,最重要的还是要亲手编程,这个题单正是使用这种手把手指导的方式,教会你亲手编写SQL代码,让你实现从萌新到大佬的跨越。
点击链接赶紧练习起来吧:https://www.nowcoder.com/link/pc_csdncpt_red_sql