加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

在工作中常用到的SQL

发布时间:2019-08-08 01:12:16 所属栏目:编程 来源:佚名
导读:这篇文章来记录一下我曾经忘掉的group查询、join查询等一些比较实用/常用的SQL。 本文主打通俗易懂,不涵盖任何优化(适合新手观看) 一、回顾group 查询 group查询就是分组查询,为什么要分组查询?因为我们想按某个维度进行统计。下面来看个图: 现在我的数
副标题[/!--empirenews.page--]

在工作中常用到的SQL

这篇文章来记录一下我曾经忘掉的group查询、join查询等一些比较实用/常用的SQL。

本文主打通俗易懂,不涵盖任何优化(适合新手观看)

一、回顾group 查询

group查询就是分组查询,为什么要分组查询?因为我们想按某个维度进行统计。下面来看个图:

在工作中常用到的SQL

现在我的数据如下

比如说,我想知道:每天Java3y这个公众号的点击量是多少。按我们人工而言,思路很简单:把相同的天数以及公众号名称为Java3y的数据找出来,再将每个点击量相加,就得出了结果了。

在工作中常用到的SQL

步骤

用上SQL我们可能会这样写:

  1. select name,time,sum(pv) as pv from xxx_table where name = 'Java3y' group by name,time 

1.1 group 查询可能存在的误解

记得有一天,有个群友在群上问了一个问题:

在工作中常用到的SQL

群里边的一个问题

其实他的需求很简单:检索出数据分组后时间最高的记录。但他是这样干的:

  1. 把先按照时间 order by
  2. 对order by后的记录进行分组

示例图:

在工作中常用到的SQL

群里面的一个图

1.2 造成这个误解的可能原因

有的工具可以支持这种的写法:

  1. select * from xxx_table group by name 

这种写法没有被禁止,并可以得出结果,比如得到的结果是:

  1. Java4y 20 7月15号
  2. Java3y 30 7月15号 

这种写法其实是不合理的,要知道的是:使用group by分组统计之后,我们的select 后面只能跟着group by 的字段,或者是聚合函数。

在工作中常用到的SQL

group by规则

因为,我们对数据进行了分组查询,数据的分布情况,我们是不关心的。

记住:先分组,后统计(先把数据归类后,再对相同的数据进行统计)

1.3 group查询最常用的SQL

去重是我们经常会遇到的问题,打个比方说,由于各种原因(不管是业务上还是说是脏数据),现在我有两条重复的数据(除了ID,其余的字段都是相同的):

在工作中常用到的SQL

重复的数据

我这边只希望留下某一条记录作为查询结果就好了,我们可以写下以下的SQL:

  1. select * from user where id in( select min(id) from user where name = 'Java3y' and pv = 20 and time='7-25' group by name,pv,time;) 

上面这条SQL是非常非常实用的,除了我说的去重以外,其实我们可以再”思考“一下:

上面已经说了,使用group by分组统计之后,我们的select 后面只能跟着group by 的字段,或者是聚合函数。

很多时候我们group by了以后,还想要查询结果中包含group by之外的字段(一般情况下,我们都不可能将group by 涵盖所有的字段),我们就可以上面那样,将查询后的结果作为子查询,放在外部查询的where 子句后,这样外部查询是可以select 出其他字段的。

(SQL写得比较少的朋友可能没什么感触啊,但我希望上面那种写法大家能够记住,以后一定会遇到类似的情况的)

二、回顾join查询

join查询不知道大家在刚学的时候是怎么理解的,反正我当初好像就挺迷迷糊糊的。我觉得join查询可以简单理解成这样:我想要的查询结果,一张表搞不掂,那我就join另一张表

比如说,现在我有两张的表:

在工作中常用到的SQL

第一张表

在工作中常用到的SQL

第二张表

现在我想知道在7月25号时:每个公众号的点击量、公众号名称、号主名称、公众号的创建日期

  • 显然,我们会发现一张表搞不掂啊,某些数据要依赖于另一张表才能把数据"完整"展示出来

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读