牛客网上提供在线MYSQL语句学习,根据出的题直接进行编写SQL,运行提交。
此文章用于记录学习过程中需要加强的知识点。
问题1:查询结果去重----查询某列中所有结果,并将该列中重复的值去掉,只保留一个值
SELECT DISTINCT 列名称 FROM 表名称
列名称为需要去重的对应列名
问题2:限制返回记录条数----只显示查询结果的前2条记录
select <列名>,<列名>,...from <表名> limit <参数值>;
select * from product limit (1,3)--返回结果index=1的开始的3条记录
select * from product limit 3;--返回结果index=0的开始的3条记录
limit n:只有一个参数时,代表返回从0开始的总的n条记录
limit m,n:m代表第一条记录的index编辑(第一条记录从0开始),n代表要返回的记录总数
问题3:将查询结果中某列重命名显示
select <列名> as <新列名> from <表名>
例如:SELECT device_id AS user_infos_example FROM user_profile LIMIT 2
问题4:查找除某值的记录信息
select <列名>,<列名>,...from <表名> where 列名 not in ('值1’,'值2' ......)
select device_id,gender,age,university from user_profile where university not in ('复旦大学');
问题5:过滤掉值不等于NULL的值
select <列名>,<列名>,...from <表名> where 列名 is not null
select <列名>,<列名>,...from <表名> where 列名 is null
注意:是否等于NULL值,不能用 <> null 或!= null 或=null
问题6:查找某列的最大值
select max(<列名>),<列名>,...from <表名> where 列名 ....
问题6:GROUP BY查找某组的个数之类的
题目:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。
用户信息表:user_profile
30天内活跃天数字段(active_days_within_30)
发帖数量字段(question_cnt)
回答数量字段(answer_cnt)
id | device_id | gender | age | university | gpa | active_days_within_30 | question_cnt | answer_cnt |
1 | 2138 | male | 21 | 北京大学 | 3.4 | 7 | 2 | 12 |
2 | 3214 | male | 复旦大学 | 4.0 | 15 | 5 | 25 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 | 12 | 3 | 30 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 | 5 | 1 | 2 |
5 | 5432 | male | 25 | 山东大学 | 3.8 | 20 | 15 | 70 |
6 | 2131 | male | 28 | 山东大学 | 3.3 | 15 | 7 | 13 |
7 | 4321 | male | 26 | 复旦大学 | 3.6 | 9 | 6 | 52 |
select gender,university,count(device_id) as user_num,avg(active_days_within_30) as avg_active_day,avg(question_cnt) as avg_question_cnt from user_profile group by university,gender
.......持续补充
问题7:UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
问题7:记录结果值是新命名的值,在原表中没有对应的值
CASE 语法
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END;