描述
题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。 示例: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
小结
为什么使用group by比distinct更有效率
使用group by比distinct更有效率的原因是,group by允许我们同时按照多个列
进行聚合(对每组数据进行计算),而distinct只能对单个列
进行聚合。在进行多列聚合时,可以减少重复的操作,从而提高效率。
在处理多列时,group by可能会涉及到更多的计算量,但是group by的优势在于group by的聚合方式是在一次
扫描数据时完成的,而distinct则需要对数据进行多次扫描
。
例如,如果我们需要统计一年中每个月的总销售金额,使用group by可以同时按照年份和月份两个维度进行聚合,而distinct则需要先对年份去重,再对月份去重,这就导致了多次扫描数据,效率反而更低。
distinct应用场景
虽然在多数情况下,使用GROUP BY比DISTINCT更高效,但是在一些特殊情况下,使用distinct可能更为适合,例如:
- 当需要对一个
非常大的数据集去重
时,使用DISTINCT可能更高效,因为它不需要为每个分组计算聚合函数。 - 当需要去重的数据
本身就已经排序好
时,使用DISTINCT可能更高效,因为它只需要找到不同值的起始位置和结束位置,而不需要计算分组聚合。 - 当需要去重的数据只有
少数几个不同的值
时,使用DISTINCT也可能更高效,因为它只需要在查找到不同值后停止扫描,而不需要扫描整个数据集。
总的来说,如果需要对数据进行分组聚合,并且分组条件不止一个,或者需要多个聚合函数计算
,那么使用GROUP BY会更为适合。
如果只需要去重,并且数据量极大,或者数据已经排序,或者数据集中只有少数几个不同值
,那么使用DISTINCT可能更高效。