zoukankan      html  css  js  c++  java
  • MySQL之 GROUP BY 和DISTINCT

    本节内容总结自《High Performance MySQL》

    1. DISTINCT:DISTINCT是用来去重的。DISTINCT支持单列,多列的去重方式。单列去重的方式是相同的值只保留一个。多列去重是根据指定列的信息进行的,即只有所有指定的列都相同,才会被认为是相同的信息。
    2. GROUP BY:在一个查询语句中,GROUP BY 是在SELECT语句之前执行的。实际上GROUP BY 子句执行完会生成一个临时表(这个临时表将原表中的分组字段相同的列合并为一个列,这其中,分组字段合并为一个值,其他字段为多个值的叠加态),因此对于GROUP BY前的SELECT,如果不使用聚合函数,则最好选择分组字段否则可能出现一列有多个值的情况。之后SELECT取字段时就是从这个临时表中获取的。GROUP BY 之前可以通过WHERE 条件筛选一定的行(WHERE先执行,后通过GROUP BY生成临时表),WHERE条件中不能包含聚合函数。也可以在GROUP BY 后面通过HAVING筛选一定的组(GROUP BY 先生成临时表,后通过HAVING限制组),HAVING子句的作用是筛选满足条件的组(组即GROUP BY 生成临时表中的每一行数据),即在分组之后过滤数据,条件中经常包含聚合函数。
    3. 对关联查询做分组:如果需要对关联查询做分组,并且是按照查找表中的某个列进行分组,那么通常采用查找表的标识列分组的效率会比其他列高。
    4. 分组查询中选用非分组列:SELECT后面出现的非分组列一定是直接依赖分组列,并且在每个组内的值是唯一的。可以在服务器的SQL_MODE设置为包含ONLY_FULL_GROUP_BY来禁止这样的写法。
    时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面…… 没有谁生来就是神牛,而千里之行,始于足下!
  • 相关阅读:
    C++官方文档-静态成员
    C++官方文档-this
    C++官方文档-运算符重载
    springboot-dokcer
    HDU 1073
    HDU 1070
    UVa 213
    HDU 1150
    POJ 1274
    POJ 2594
  • 原文地址:https://www.cnblogs.com/bianjunting/p/14374035.html
Copyright © 2011-2022 走看看