`
kingquake21
  • 浏览: 270129 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql中的Group by与Having

阅读更多

先看一下这个SQL

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;

 在标准SQL中,上面这句查询 是不合法的,因为该查询包含Group by子句,所以在select列表中的列只能是group by里面声明的列,或者是使用了聚集函数的列。而上面这句SQL中c.name不属于这两者

 

但是在Mysql中对Group by功能进行了扩展,使得在包含有group by子句的查询中也能select没有使用聚集函数的列,也就是说上面这句话在Mysql里面是合法的。可是,语句虽然合法,但是Mysql并不保证该列的正确性,Mysql只会从分组中随意的取出该列的值,也就是说在每一个分组中,未聚集的列的值如果都是相同的,那么这句话没有任何问题,否则就可能出错。

 

同理,对于Having子句也存在同样的问题。

标准SQL是不允许Having子句中引用未在group by子句中出现的列,除非该列是使用了聚集函数

Mysql对Having的扩展与其对Group by的扩展类似

分享到:
评论

相关推荐

    mysql中group by与having合用注意事项分享

    在MySQL中,`GROUP BY` 语句是用来对数据进行分组的,它允许我们将具有相同列值的行聚集在一起。通常,我们会结合聚合函数(如 `COUNT`, `SUM`, `AVG`, `MIN`, `MAX`)一起使用,以便对每个分组执行计算。而 `HAVING...

    MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究

    在MySQL中,`GROUP BY` 和 `HAVING` 通常一起用于聚合查询,用来筛选满足特定条件的分组。然而,当没有 `GROUP BY` 子句时,直接使用 `HAVING` 可能会导致非预期的行为。这个问题的探讨主要集中在 `HAVING` 后面直接...

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

    在MySQL数据库中,ORDER BY、GROUP BY 和 HAVING 子句是SQL查询中用于数据处理的关键组成部分,它们各自承担不同的任务,以帮助我们从数据库中提取有用的信息。 ORDER BY 子句主要用于对查询结果集进行排序。当你...

    mysql group by having 实例代码

    在MySQL数据库中,`GROUP BY` 和 `HAVING` 是两个非常重要的SQL子句,它们在数据分析和报表生成中扮演着关键角色。`GROUP BY` 用于将数据按照指定的一个或多个列进行分组,而 `HAVING` 则用于在分组后对这些分组进行...

    MySQL无GROUP BY直接HAVING返回空的问题分析

    对于 MySQL 中 HAVING 子句和 GROUP BY 子句的使用,还要注意以下几点: 1. 当使用 GROUP BY 子句时,如果没有在 SELECT 语句中明确列出所有非聚合列,查询可能会返回错误。这是因为 MySQL 需要确保每个分组中的非...

    深度分析mysql GROUP BY 与 ORDER BY

    本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表   我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下   明显。这不是我想...

    having-mysql

    ### MySQL中的HAVING子句详解 #### 聚合函数简介 在深入探讨`HAVING`子句之前,首先需要了解SQL中的聚合函数。聚合函数是SQL语言中一种特殊的功能,用于处理多条记录并返回单个结果。常见的聚合函数包括: - **SUM*...

    mysql group by用法

    MySQL中的`GROUP BY`语句是用于对数据库中的数据进行分组,以便可以对每个分组执行聚合操作,如计算总和、平均值、最大值、最小值等。这个功能在数据分析和报表生成中非常常见,因为它允许我们按特定字段对数据进行...

    mysql获取group by总记录行数的方法

    在升级MySQL到5.7后遇到的`GROUP BY`查询问题,通常与新的严格模式有关,理解这些变化并相应地调整代码是解决问题的关键。 总之,通过`SQL_CALC_FOUND_ROWS`和`FOUND_ROWS()`的结合使用,可以有效地在`GROUP BY`...

    mysql中order by与group by的区别

    在MySQL数据库中,`ORDER BY` 和 `GROUP BY` 是两个非常重要的子句,它们各自在数据处理中扮演着不同的角色。理解它们的区别对于优化查询性能和获取所需数据至关重要。 `ORDER BY` 子句主要用于对查询结果进行排序...

    mysql使用GROUP BY分组实现取前N条记录的方法

    总结来说,MySQL中的GROUP BY分组功能不仅限于简单的聚合计算,还可以配合其他查询语句,如JOIN、HAVING和子查询,实现更复杂的查询需求,如获取每个分组的前N条记录。在处理这类问题时,理解并熟练运用这些技巧将有...

    基于TP框架SQL之where与having区别

    - 作用:在对查询结果进行分组(GROUP BY)前,根据指定条件筛选记录,即在分组之前过滤数据。 - 特点:条件中不能包含聚合函数,因为此时数据尚未经过分组,聚合函数无法计算出有意义的结果。 - 示例用途:显示...

    简单讲解sql语句中的group by的使用方法

    SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...

    mysql遇到Expression.docx

    在该模式下,MySQL不允许在`SELECT`列表、`HAVING`条件或`ORDER BY`列表中引用未在`GROUP BY`子句中出现的非聚合列,除非这些列与`GROUP BY`中的列有函数上的依赖关系。例如,如果你正在根据员工的部门进行分组,...

    group by,having,order by的用法详解

    在SQL查询中,`GROUP BY`、`HAVING` 和 `ORDER BY` 是三个非常重要的子句,它们分别用于数据的分组、筛选和排序。接下来我们将深入探讨这三个概念及其用法。 首先,`GROUP BY` 子句用于将数据按照一个或多个列进行...

Global site tag (gtag.js) - Google Analytics