正文
group by规则
因为,我们对数据进行了分组查询,数据的分布情况,我们是不关心的。
记住:先分组,后统计(先把数据归类后,再对相同的数据进行统计)
1.3 group查询最常用的SQL
去重是我们经常会遇到的问题,打个比方说,由于各种原因(不管是业务上还是说是脏数据),现在我有两条重复的数据(除了ID,其余的字段都是相同的):
重复的数据
我这边只希望留下某一条记录作为查询结果就好了,我们可以写下以下的SQL:
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另一张表
比如说,现在我有两张的表:
第一张表
第二张表
现在我想知道在7月25号时:每个公众号的点击量、公众号名称、号主名称、公众号的创建日期
显然,我们会发现一张表搞不掂啊,某些数据要依赖于另一张表才能把数据"完整"展示出来
那join其实就是把两张表合起来的一个操作:
join其实就是一个合并的操作
两张表合并起来以后我们就会发现,这张“大表”就含有这两张表的所有字段啦,那我想要什么都有了!
值得注意的是:在join的时候,会产生笛卡尔积(至于什么是笛卡尔积我这里就不说了,反正我们要记住的是join表时一定要写关联条件去除笛卡尔积)