2022年 MySQL遇到的坑1

> SQL4 查询结果限制返回行数 select device_id from user_profile where device_id is not null limit 0,2; -- 写法2:limit 2 -- 返回2行数据

> SQL8 查找某个年龄段的用户信息 select device_id,gender,age from user_profile -- where age>=20 and age<=23; where age between 20 and 23;

> SQL9 查找除复旦大学的用户信息 select device_id,gender,age,university from user_profile -- where university !="复旦大学"; where university not in("复旦大学");

> SQL12 高级操作符练习(2) select device_id,gender,age,university,gpa from user_profile -- where university not in('浙江大学') or gpa>3.7; where university ='北京大学'or gpa>3.7;

> SQL14 操作符混合运用 select device_id,gender,age,university,gpa from user_profile -- where university in('山东大学','复旦大学') -- or (gpa > 3.5 and gpa>3.8); where (gpa>3.5 and university='山东大学') or (gpa>3.8 and university='复旦大学');

> SQL15 查看学校名称中含北京的用户 select device_id,age,university from user_profile -- where university like '%北京%'; WHERE university regexp "北京"; -- 正则表达式用来匹配文本的特殊的串(字符集合)(匹配文本,将一个模式(正则表达式)与一个文本串进行比较)。

-- LIKE 和 REGEXP之间的重要差别 -- LIKE 匹配整个列,如果被匹配的文本在列值中出现,LIKE 将不会找到它,相应的行也不会被返回(除非使用通配符)。而 REGEXP 在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP 将会找到它,相应的行将被返回,并且 REGEXP 能匹配整个列值(与 LIKE 相同的作用)。

> SQL16 查找GPA最高值 select max(gpa) from user_profile where university="复旦大学" limit 1;-- 只查询一条数据。此处可以省略不写

> SQL17 计算男生人数以及平均GPA -- 列的重命名:1.列名 别名 ;2.列名 '别名' ;3.列名 as 别名 ; -- select count(gender) as male_num,avg(gpa) as avg_gpa -- from user_profile -- where gender='male';

-- round为四舍五入,只取1位小数 select count(gender) 'male_num', round(avg(gpa),1) 'avg_gpa' from user_profile group by gender having gender ='male'

> SQL18 分组计算练习题 select gender,university,count(*) 'user_num', avg(active_days_within_30) 'avg_active_day',avg(question_cnt) 'avg_question_cnt' from user_profile group by gender,university;

> SQL19 分组过滤练习题 select university,avg(question_cnt) "avg_question_cnt",avg(answer_cnt) "avg_answer_cnt" from user_profile group by university having avg(question_cnt) <5 or avg(answer_cnt)<20; -- group by 为分组函数,常跟having连用,having为条件筛选,条件过滤

> SQL20 分组排序练习题 select university,avg(question_cnt) "avg_question_cnt" from user_profile group by university order by avg(question_cnt) ; -- order by为排序函数,默认的排序为降序desc(从高变低);它的后面可以放聚合函数或普通字段 -- group by 为分组函数,它的后面可以放聚合函数或普通的字段; -- 注意事项:用到了分组函数,此处的字段用到了分组函数,那么在select查询后面也要有分组的这个字段【重点】

> SQL21 浙江大学用户题目回答情况 select u.device_id,q.question_id,q.result from question_practice_detail q left join user_profile u on q.device_id = u.device_id where u.university="浙江大学";

> SQL22 统计每个学校的答过题的用户的平均答题数 select u.university, -- 平均回答数是回答数 除以 回答的人-- 即question_id/device_id
count(q.question_id)/count(distinct(q.device_id)) avg_answer_cnt from user_profile u -- join 内连接(INNER JOIN) join question_practice_detail q on u.device_id = q.device_id group by u.university; -- 此处用到group by 的原因,程序输出的结果有2个北京大学,所以把有相同字段的北京大学归类为同一类进行统计输出 -- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。 -- 使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样) -- 此处不能有外连接,否则查询的时候有其他的大学的字段出来 -- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 -- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

复杂函数最外层的括号可以不用写,为了美观可以写上 此处用到group by 的原因,程序输出的结果有2个北京大学,所以把有相同字段的北京大学归类为同一类进行统计输出 详细的group by和聚合函数的用法(图解)请看这个链接: 链接https://blog.csdn.net/zj20142213/article/details/81073428

全部评论
正要看看sql的题目,正好避避坑
点赞 回复 分享
发布于 2022-08-06 10:36

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务