4.对数据表进行分组--Group By

4.对表进行分组

a.使用Group By应该注意以下几点

  • 1.只能写在Select语句中(如果有where子句需要写在where子句之后)
  • 2.Group By的结果是无序的
  • 3.where 子句中不能使用聚合函数
  • 4.Group By的筛选数据条件应该写在HAVING子句中

b.Group by 常见的问题

  • 1.select中使用了对于的列值
  • 2.在where子句中使用聚合函数

c.筛选分组--Having

  • eg:sc学生成绩表,有sno字段,cno课程表,grade分数
  • select cno,count(*) from sc group by cno having count(*)>2;
  • Having如何使用
      • 1.常数
        • 0返回空  非0表示正确      
      • 2.group by中指定的元素(建议写在where条件中)
        • select cno,count(*) from sc group by cno having cno="EE-1"  
      • 3.聚合函数  
        • select cno,count(*) from sc group by cno having count(*)>2

d.where子句与Having子句的执行速度比较

  • 1.SQL执行顺序:From-->WHERE-->Group By-->Having-->Select
  • 2.Group by中会按照分组的列进行排序,排序的数据越少越好
  • 3.所以筛选数据放在where中比较合适
      • a.Having中只能使用group by对应的列
      • b.where子句可以删除一部分数据,还可以为对应的列添加索引 

 

posted @ 2017-02-24 20:46  疯狂的肉包  阅读(453)  评论(0编辑  收藏  举报