产品经理学SQL(二)一天学会用SQL解决业务查询问题(中篇)

18 评论 17829 浏览 148 收藏 8 分钟

本篇旨在将实务中最常出现的详细情况进行说明,从而解决产品经理80%的sql查询任务;希望对大家有帮助~

前言

之前我们已经用一个例子介绍了SQL的语法顺序和执行顺序,想必现在你已经知道了一个完整的SQL包括条件子句(关键字where)、分组查询(关键字group by)、字段选择(关键字select)和结果呈现(关键字order by)。本篇我们旨在将实务中最常出现的详细情况进行说明,从而解决产品经理80%的sql查询任务

产品经理学SQL(二)一天学会用SQL解决业务查询问题系列共包括前中后三篇,建议学习时间为一天

想回顾之前内容的可以点击:

产品经理学SQL(一)一个小时上手SQL

产品经理学SQL(二)一天学会用SQL解决业务查询问题(上篇)

条件子句(where)

1. 比较运算符(适用于区间)

比较运算符包括=(等于),>=(大于等于),<=(小于等于),!=(不等于),>(大于),<(小于)。

例如:查询年龄sage小于30的学生

where sage < 30

2. 确定范围(适用于连续范围)

between … and …为取值限定了一个范围。

例如:查询年龄大于等于10小于等于20的学生

where sage between 10 and 20

3. 确定集合(适用于离散的少数值)

例如:插入年龄为10,20,30的学生

where sage in (10,20,30)

**in可以和not一起使用,表示不在这个区间的值

**where sage not in (10,20,30)

4. 字符匹配(模糊查询)

通过like关键字和正则表达式匹配,常用的通配符有%(任意个字符)和_(一个字符)。

例如:查询名字sname带“王”的学生

where sname like “%王%”

5. 判断是否为空值

通过is null关键字判断值是否为空。

例如:查询姓名sname不为空的学生

where sname is not null

6. 多个查询条件

用and(两个条件同时满足)和or(两个条件满足一个即可)

例如:查询年龄sage小于20且性别ssex为男的学生

where sage<20 and ssex=’男’

一、分组查询(group by&聚合函数&having子句)

分组查询实现了类似excel中数据透视表的功能,可以帮助我们对数据进行分层汇总,而我们对分层后的数据进行统计的时候需要用到聚合函数(也就是平均值、求和、最大值和最小值等),最后我们对分层之后的数据筛选的时候需要用到having子句。

**where子句是对原始表做筛选的

**having子句是对分层汇总之后的结果做筛选的

回顾我们上一篇讲过的例子:在限定学生表学号小于等于6的一批学生中,查询每门课的最高成绩(最高成绩低于70分的课程不显示),然后根据课程最高成绩降序排列取前两条记录。

查询的SQL如下:

回顾一下执行顺序,首先我们用where子句对原始数据做了学号id需要小于等于6的限制。然后我们用group by和max(score)聚合函数实现了对课程进行分层,求出每门课的最高成绩,为了对聚合之后的结果作限制,我们用having子句只展示最高分数大于等于70的记录。

关于这个例子详细解释可以回顾上篇文章,下面我们详细介绍每个部分的常用语句。

1. group by

group by不仅可以对一个字段进行分组,还能对多个字段进行分组。这和excel中的数据透视表一致。

2. 聚合函数

3. having子句

和where子句一致,只需注意是对聚合后的结果作限制

二、字段选择(select)

select比较灵活,我们不单单能选择原始数据表的字段,还能使用函数对字段进行计算,正如我们第一篇提到的,函数并不是重点,当你需要的时候百度或者问技术小哥就知道了。我们这里只简单介绍一下可以对字段进行计算。

例如:查询各学生的年龄(通过公式计算年龄)

三、结果呈现(order by)

  1. 和excel一样,可以用多个字段排序
  2. 关键字desc表示降序排列

例如:查询学生id和年龄,并先按照学号sid降序,再按照年龄sage升序排列

四、后续学习

本篇文章的目的主要是帮助非技术人员在初步知晓SQL语句的情况下在一天之内系统入门SQL,从而解决80%的sql查询问题。

但是由于建议学习时间为一整天,全部内容置于一篇文章一方面过于冗长,另一方面影响读者趁热打铁(作者是上班族,更新比较慢哈望谅解~),因此我把一天学会用SQL解决业务查询问题分为上中下三篇

上篇已经介绍了SQL的语法顺序和执行顺序的区别并仔细剖析了SQL的执行顺序;这篇详细介绍了条件子句、分组查询和排序的细节;下篇会介绍表的连接和其他常用关键字。

希望学完这三篇后能助你系统地入门SQL~

 

作者:Tomocat,女朋友是产品经理的数据分析师。

本文由 @Tomocat 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于 CC0 协议。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 知乎上没找到呢

    来自北京 回复
  2. 那个排序那边,默认升序ASC吧,按照你要取得成绩前两位,应该在order by 的后面加desc吧

    来自江苏 回复
  3. 受用

    回复
  4. 请问楼主现在的知乎号叫什么?或者专栏文章名字叫什么?

    来自北京 回复
  5. 下载什么软件啊

    来自河北 回复
  6. 非常感谢楼主的分享,清晰易懂,很有帮助

    来自北京 回复
  7. 发文审核显示观点不清晰没给过,想看下篇可以关注我的知乎号,然后在专栏里面看。知乎号:网瘾大叔。

    回复
    1. 谢谢楼主的分享!另外,知乎上面找不到您呀,您的文章名字叫什么呢?

      来自福建 回复
    2. 找到了!

      来自福建 回复
    3. 为什么找不到呀

      来自北京 回复
    4. 你找了吗

      来自北京 回复
  8. 下篇呢?

    来自北京 回复
  9. 楼主请问下篇什么时候出呢?感恩

    来自上海 回复
    1. 抱歉,通不过人人都是产品经理社区的审核,以后应该都在知乎平台更新了。

      来自北京 回复
  10. 今年放假了,最近两天想花点时间做个2018电影年终盘点,sql的教程先搁置下~

    回复
    1. 今天放假了

      回复
  11. 之前我都是自己在菜鸟网站上看教程,看得很累,感谢楼主的整理;
    还有就是建议搞些测试库,新手纯阅读式学习,一下就忘了

    来自香港 回复
    1. 测试案例的话后续会更新的

      回复