首页 > 试题广场 >

查询结果去重

[编程题]查询结果去重
  • 热度指数:519856 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。

示例:user_profile
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
北京大学
复旦大学
浙江大学
山东大学
示例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');

输出

北京大学
复旦大学
浙江大学
山东大学
distinct和group by区别
distinct
distinct 只能放在查询字段的最前面,不能放在查询字段的中间或者后面。
distinct 对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 distinct 后面连接的单个字段重复的数据。
要查询多个字段,但只针对一个字段去重,使用distinct去重的话是无法实现的。

group by
一般与聚类函数使用(如count()/sum()等),也可单独使用。
group by 也对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 group by后面连接的单个字段重复的数据
查询的字段与group by 后面分组的字段没有限制。(在oracle中使用group by时,查询的字段必须是group by 分组的字段和聚类函数。如select name,sex from tb_students group by name这个sql

发表于 2022-04-21 13:40:18 回复(3)
两个解法:
1. 使用DISTINCTSELECT DISTINCT university from user_profile;
2. 使用group by:SELECT university from user_profile GROUP BY university;
发表于 2021-10-20 20:28:37 回复(3)
为什么你们都没有说到 union 这个:
select university from user_profile
union
select university from user_profile
发表于 2023-01-31 11:57:02 回复(6)
我觉的这个题可以用去重关键字 DISTINCT 来写像这样 SELECT DISTINCT university  from user_profile;
也可以用分组 来做像这样 SELECT university FROM user_profile GROUP BY user_profile
发表于 2021-10-19 10:23:14 回复(6)
SELECT DISTINCT university
FROM user_profile
SELECT  university
FROM user_profile
GROUP BY university

使用哪个看个人习惯,很多情况下我个人更喜欢使用 group by来去重。

发表于 2022-07-13 14:26:24 回复(0)
SELECT DISTINCT university
FROM user_profile
发表于 2021-08-27 09:04:35 回复(2)
笔记:DISTINCT 只能用于去除列级别的重复,不能用于去除行级别的重复。
发表于 2023-10-19 19:14:37 回复(3)
# 注意  DISTINCT 要放到列名的前面。
SELECT DISTINCT university  from user_profile


发表于 2021-09-14 20:47:41 回复(3)

【分类】:查询结果去重

分析思路

select 查询结果 [distinct 学校]
from 从哪张表中查找数据 [user_profile]

求解代码

select
    distinct university 
from user_profile
发表于 2022-11-24 19:20:05 回复(0)
SELECT distinct university 
FROM user_profile

运行时间:44ms超过62.69% 用Mysql提交的代码
占用内存:6400KB超过96.10%用Mysql提交的代码

利用 DISTINCT 去重,
需要放在去重字段前面;

方法二:
SELECT university 
FROM user_profile
GROUP BY university 
运行时间:42ms超过81.22% 用Mysql提交的代码
占用内存:6644KB超过30.90%用Mysql提交的代码
利用 GROUP BY  去重,其相当于excel的透视
该函数后面跟着是去重字段
发表于 2022-05-12 16:46:18 回复(0)
select distinct university from user_profile
发表于 2022-05-14 00:14:53 回复(0)
select distinct university from user_profile;
发表于 2022-03-31 10:40:27 回复(0)
select distinct university from user_profiles;
发表于 2022-03-08 17:21:43 回复(0)
SELECT DISTINCT university
FROM user_profile;

发表于 2021-09-24 18:28:23 回复(0)

写法1:

select
distinct university
from user_profile

写法2:

select
university
from user_profile
group by university

发表于 2025-02-06 09:31:02 回复(0)
select distinct university from user_profile;
发表于 2021-11-03 16:11:16 回复(0)
deepseek:
1. 核心原理:为什么 GROUP BY 能去重?
当你在 SELECT 后面只写 GROUP BY 的那一列(而不写聚合函数,如 SUM, COUNT 等)时,GROUP BY 的行为就是将这一列中所有相同的值合并成唯一的一组。

发表于 2026-04-30 15:07:00 回复(0)
查询结果去重。
SELECT DISTINCT university
FROM user_profile
发表于 2026-02-19 13:10:24 回复(0)
select distinct university from user_profile; select university from user_profile group by university;
编辑于 2025-04-06 23:54:03 回复(0)
为什么聚合函数group by 比distinct运行时间快,占用空间小

发表于 2024-06-05 12:00:29 回复(0)