SQL 全名是结构化查询语言,是用于数据库中的标准数据查询语言.校招过程中,SQL是很重要的一部分。SQL广泛应用于MySQL,HIVE等数据库中。在DT时代,数据量巨大,为了更好的使用这些数据,SQL使用的频率越来越高.不仅是开发人员,产品同学,运营同学都需要掌握基本的SQL来提升工作的效率.下面用一道常见的面试题来带学习SQL基础用法。
1.问题描述
有如下的一个数据表,表名是score.uid代表用户id.score代表得分,date代表日期。图片展示的数据比较少,请大家理解表结构和基本的几条数据。
问题:需要取出一份用户列表要求在2017年3月份的31天中,至少要有16天,每天得分的总和大于40分,请用SQL表示。
2.解题思路
这个问题乍一看比较复杂,很多同学无从下手。首先将这个问题拆解成两个简单问题,一个是在3月份至少登录了16天。另一个问题是每天得分的总和大于40分。
两个简答的问题都用到了分组的思想,GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
一般当以时间为维度区分数据的时候,在MySQL中使用date_fornat这个函数进行区分。
针对3月份至少登录了16天的问题我们可以写出如下SQL.
select uid,date_format(date,”%Y-%m”) as month ,count(distinct date) as login_time from score where date > ‘2017-02-28’ and date < ‘2017-04-01’ group by uid,month having login_time > 16;
我们使用DISTINCT来过滤重复数据。当谈到DISINCT的时候,面试官一般会问如何在设计表结构的时候避免重复数据?答案是使用UNIQUE保持某个字段值的唯一。
针对每天得分的总和大于40分可以写出下面SQL.
select uid,date,sum(score) as total from score group by uid,date having total > 40;
两个简单的问题解决了,讲符合条件的数据结合起来就能得出答案。这里用到的SUM和上面的COUNT,你还记得区别吗?
.区别就是SUM是求某一列值的和,而COUNT是统计行数。
3.总结分析
这个题目虽然简单,但全面的考察了SQL的基础。是实际面试中很常见的一道题,有的面试官为了考验同学的SQL能力,还喜欢问,如果用一条SQL,如何解决上面的问题???请同学思考一下,将答案告诉我,咱们一起交流学习。
夯实基础,稳定心态,愿大家早日拿到offer!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/8255.html