groupby和having在什么状况下使用mysql
使用时须要注意什么sql
demo :原始表函数
结果表:根据每位user的rate的平均值更新rate, rate = rate - avg(rate)大数据
CREATE table userRate( id int(2) NOT null auto_increment, user int(2) not null DEFAULT 0, rate int(2) not null DEFAULT 0, PRIMARY KEY(id) )
INSERT into userRate(user,rate) VALUES(1,1),(1,3),(1,2),(2,4),(2,4),(2,5),(2,3);
update userRate JOIN (SELECT id,USER,AVG(rate) AS avr from userRate GROUP BY user HAVING user= userRate.user) n on n.user = userRate.user set userRate.rate= userRate.rate- n.avr
分析step3 执行顺序 step3.1 执行查询操做userRate(隐藏了查询,要否则后面的userRate.user得不到数据), SELECT id,USER,AVG(rate) AS avr from userRate(不是我想黑别人,有些文章写说这条语句是错误的,由于用到了聚合函数,还有其余字段,其余字段必须在groupby 后面出现,实质上mysql并没报错,可是他只显示第一条语句)
step3.2 执行groupby 分组查询 GROUP BY user 根据用户名分组查询
网站
step3.3 条件判断having来了 having user= userRate.usercode
step3.4 join on的组合(下次讲解)索引
step3.5 update set 语法图片
何时用到group by ,根据字面意思就是分组,好比:某个用户访问哪一个网站多少次(sum)统计,某位同窗成绩的平均值,having 作个条件判断过滤不要的信息,开发
之后继续为你们带来mysql实战系列,为大数据开发打下基础,最后提醒你们,但愿你们本身敲sql语句,查看结果,分析错误,那就是真正属于你的知识结构。rem
QQ交流群: 181666459