Mysql中order by、group by、having的区别深入分析

 更新时间:2013年06月13日 10:01:44   作者:  
本篇文章是对Mysql中order by、group by、having的区别进行了详细的分析介绍,需要的朋友参考下

order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 
group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。

什么是“聚合函数”?
像sum()、count()、avg()等都是“聚合函数”
使用group by 的目的就是要将数据分类汇总。

一般如:
select 单位名称,count(职工id),sum(职工工资) form [某表]
group by 单位名称
这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。

在sql命令格式使用的先后顺序上,group by 先于 order by。

select 命令的标准格式如下: 
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]

1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)

例如,有如下数据库表: 
A    B
1    abc
1    bcd 
1    asdfg 
如果有如下查询语句(该语句是错误的,原因见前面的原则)

select A,B from table group by A
 
该查询语句的意图是想得到如下结果(当然只是一相情愿) 
A     B
       abc
1     bcd

       asdfg 
右边3条如何变成一条,所以需要用到聚合函数,如下(下面是正确的写法):

select A,count(B) as 数量 from table group by A
这样的结果就是    
A 数量
1    3

2. Having
 
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如: 
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

相关文章

  • MySQL 数据库的对库的操作及其数据类型

    MySQL 数据库的对库的操作及其数据类型

    这篇文章主要介绍了MySQL 数据库的对库的操作及其数据类型,下面文字围绕数据库的对库的操作及其数据类型的相关资料展开详细介绍,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12
  • MySQL复合查询和表的内外连接示例详解

    MySQL复合查询和表的内外连接示例详解

    在数据库管理和数据分析中,单表查询往往无法满足复杂的数据查询需求,因此多表查询和子查询成为了解决问题的关键技术,MySQL支持多种多表查询方式,如内连接、外连接(左外连接和右外连接)以及自连接,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 详解数据库连接的URL的写法及总结

    详解数据库连接的URL的写法及总结

    这篇文章主要介绍了详解数据库连接的URL的写法及总结的相关资料这里提供了四种方法1、oracle.2、MySQL.3、SQL Server.4、DB2,需要的朋友可以参考下
    2017-07-07
  • mysql用一个表更新另一个表的方法

    mysql用一个表更新另一个表的方法

    下面小编就为大家带来一篇mysql用一个表更新另一个表的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • MySQL数据库的多表操作

    MySQL数据库的多表操作

    这篇文章主要介绍了MySQL数据库的多表操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08
  • Linux下MySQL5.7.18 yum方式从卸载到安装过程图解

    Linux下MySQL5.7.18 yum方式从卸载到安装过程图解

    这篇文章主要介绍了Linux下MySQL5.7.18 yum方式从卸载到安装过程图解,需要的朋友可以参考下
    2017-06-06
  • SQLServer注释快捷键操作

    SQLServer注释快捷键操作

    这篇文章主要介绍了SQLServer注释快捷键操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • MySQL中case when对NULL值判断的踩坑记录

    MySQL中case when对NULL值判断的踩坑记录

    最近在学习Hive基础知识时,遇到了遇到了Case When Else End语法,这篇文章主要给大家介绍了关于MySQL中case when对NULL值判断的踩坑记录,需要的朋友可以参考下
    2021-12-12
  • 浅谈Mysql使用B+树来实现索引的原因

    浅谈Mysql使用B+树来实现索引的原因

    这篇文章,主要来探讨一下为什么Mysql使用B+树来实现索引,这里讨论的目标是Mysql的InnoDB存储引擎.可以想象一下,如果你是Mysql的开发人员,你会怎么去选择合适的数据结构呢,感兴趣的小伙伴跟着小编一起来探讨吧
    2023-05-05
  • MySQL在Centos7环境安装的完整步骤记录

    MySQL在Centos7环境安装的完整步骤记录

    在CentOS7环境下安装MySQL是一项常见的任务,尤其对于那些没有网络连接或者需要在隔离环境中的开发者来说,离线安装MySQL显得尤为重要,这篇文章主要介绍了MySQL在Centos7环境安装的完整步骤,需要的朋友可以参考下
    2024-10-10

最新评论