牛客网在线编程SQL篇非技术快速入门题解

大家好,我是RecordLiu。

初学SQL,有哪些合适的练习网站推荐呢?
如果你有编程基础,那么我推荐你到Leetcode这样的专业算法刷题网站,如果没有,也不要紧,你也可以到像牛客网一样的编程网站去练习。
牛客网有很多面向非技术人员的练习题目,很适合入门。

今天给大家分享的是牛客网在线编程SQL篇非技术快速入门题解第一篇。

题目直达链接:牛客网非技术快速入门SQL编程练习题目

切换到SQL篇就能看到了。

我这里先列一下题目分类:

接下来,我们来详细看一看。

基础查询

1.现在运营想要查看用户信息表中所有的数据,请你取出相应结果现在。

示例:user_profile

返回结果

题解

取出所有列可以使用select *,但不建议你使用这种写法,因为性能很差。

更好的方式是查询出所有列来代替select *

代码参考

简单处理查询结果

2.现在运营只需要查看前两个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。

示例:user_profile

返回结果

题解

限制返回行数用limit实现,这道题可以使用limit 0,2 或者 limit 2

limit的第一个参数代表位置,第二个参数代表返回的条数。第一个参数可以省略,默认从位置0开始取数。

由于计算机存储的计数都是从0开始的,所以数据库中的第一行对应位置0,第二行代表位置1,其他行数的位置以此类推。

小提示

对于一些数据量很大的表记录,如果只是抽查一部分数据做参考,我们可以根据表里面的自增长ID做排序后,再结合limit取出数据,这样做,对数据库的查询压力就会小很多。

代码参考

条件查询-基础排序

3.现在运营想要取出用户信息表中的年龄和gpa数据,并先按照gpa升序排序,再按照年龄升序排序输出,请取出相应数据。

示例:user_profile

返回结果

题解

SQL中排序使用order by实现,用关键字asc表示升序,关键字desc表示降序。

多级字段排序规则order by 字段1 关键字,字段2 关键字

代码参考

条件查询-基础操作符

4.现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。

示例:user_profile

返回结果

题解

条件过滤可以使用where实现。一般,表连接的过滤使用on,分组之后的过滤使用having

执行优先级:
on > where > having。

题目要求是所有北京大学的用户,过滤条件写为where university=‘北京大学’

代码参考

条件查询-高级操作符

5.现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。

示例:user_profile

返回结果

题解

题目要求大学名称带有北京的用户信息,那么学校名称为北京大学、北京师范大学、北京交通大学等等都符合条件。

一种办法办法是使用等值过滤,列举所有可能的情况。过滤条件写成where university in(‘北京大学’,‘北京交通大学’,‘北京师范大学’,‘北京航空航天大学’)

但很明显,上面方式不简洁,而且需要穷举出所有可能的情况。

如果以后用户信息里面有新增带北京名称的大学,还要往in里面添加值,不利于拓展。

更好的方式是使用模糊匹配来实现这道题。

SQL中可以使用like+通配符来实现模糊匹配。

其中最常用的通配符是 %,代表匹配0个或者多个字符。

比如like ‘北京%’,可以匹配文本:北京、北京大、北京大学、北京交通大学等等。

其他的通配符使用不频繁,我也给你总结下了用法,作为面试时的储备。

  • _:匹配任意一个字符
  • []:匹配[ ]里面任意一个字符
  • [^ ]:不匹配[ ]中的任意一个字符

我来给你举几个例子会明白些:

  1. 查询名字姓张的用户: like ‘张%’
  2. 查询名字姓张,且为三个字的用户:like ‘张__’
  3. 查询名字为张、李、刘的用户:like [‘张’,‘李’,‘刘’]
  4. 查询名字不带张的用户: not like ‘张%’
  5. 查询用户编号首位不是1、2、3的用户: like [^123]%
代码参考

高级查询-计算函数

6.运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据

示例:user_profile

返回结果

题解

题目限制是复旦大学的学生,因此过滤条件为where university=‘复旦大学’

求最高gpa有两种方式,一种是对gpa字段进行降序排列,然后取出第一条。

第二种方式是使用SQL的计算函数max来实现,max表示取出记录中的最大值。

由于使用聚合函数后,返回的结果会带上聚合标识,所以使用as进行重命名。

我也给你总结了SQL中其他常用于计算的函数:

  • avg():返回平均值
  • count():返回总条数
  • min():返回最小值
  • sum():对记录进行求和
代码参考

方法1:

方法2:

高级查询-分组查询

7.现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。

示例:user_profile

其中,question_cnt表示发帖数量,answer_cnt表示回帖数量。

返回结果

题解

要统计每个学校的发帖和回帖的平均值,需要按学校维度分组之后,再进行平均值的计算。

分组使用group by实现,平均值计算使用avg函数。

本题的难点主要在判断 平均发贴数低于5的学校或平均回帖数小于20的学校 条件上,应该在分组之后使用having进行过滤。

代码参考

好了,今天的文章就分享到这里了,如果觉得我的文章对你有帮助,欢迎多分享给你身边的朋友。

最后,送给你一段杨振宁先生说的话:

很多东西常常是在不知不觉中,经过了一个长时期的接触,就自己也不知道什么时候已经懂了。

学习是长期的,希望你每天都有进步哇。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值