首页
学习
活动
专区
圈层
工具
发布

GROUP BY 后 SELECT 列的限制:which is not functionally dependent on columns in GROUP BY clause

GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、...子句)中的列 ?...SQL 模式主要分两类:语法支持类和数据检查类,常用的如下 语法支持类    ONLY_FULL_GROUP_BY 对于 GROUP BY 聚合操作,如果在 SELECT 中的列、HAVING 或者...ORDER BY 子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的 ANSI_QUOTES 启用 ANSI_QUOTES 后,不能用双引号来引用字符串,因为它被解释为识别符,作用与...为什么聚合后不能再引用原表中的列   很多人都知道聚合查询的限制,但是很少有人能正确地理解为什么会有这样的约束。

3.9K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【黄啊码】MySQL入门—5、数据库小技巧:单个列group by就会,多个列呢?

    好了,先来解答上节课留下的问题:【注:由于周末临时用了别的电脑,所以数据会有所不同】我们在数据库表中新增一列user_height表示身高,然后拿到所有数据:图片我们如果单单用user_age来分组看看结果如何...:你:这也太简单了吧,我来:select * from user_info group by user_age; 图片你:这。。。...我来总结一下吧:简而言之就是这里边user_id不是聚合列,在功能上也不是groug by所需要的字段。你:user_id不行?那user_name呢?...黄啊码:我发觉大聪明最近有长进了select user_age from user_info group by user_age;图片确实是可以的,这里就相当于把user_age当成聚合列来使用。...你:【下次再也不出风头了】select user_age,user_height from user_info group by user_age,user_height;图片好了,多个列进行group

    1.8K40

    【黄啊码】MySQL入门—5、数据库小技巧:单个列group by就会,多个列呢?

    好了,先来解答上节课留下的问题: 我们在数据库表中新增一列user_height表示身高,然后拿到所有数据: 我们如果单单用user_age来分组看看结果如何: 你:这也太简单了吧,我来: select...* from user_info group by user_age;  你:这。。。...我来总结一下吧:简而言之就是这里边user_id不是聚合列,在功能上也不是groug by所需要的字段。 你:user_id不行?那user_name呢?...黄啊码:我发觉大聪明最近有长进了 select user_age from user_info group by user_age; 确实是可以的,这里就相当于把user_age当成聚合列来使用...你:【下次再也不出风头了】 select user_age,user_height from user_info group by user_age,user_height; 好了,多个列进行group

    1.6K20

    为什么 GROUP BY 之后不能直接引用原表中的列

    GROUP BY 后 SELECT 列的限制   标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM...为什么 GROUP BY 之后不能直接引用原表(不在 GROUP BY 子句)中的列 ? 莫急,我们慢慢往下看。...SQL 模式主要分两类:语法支持类和数据检查类,常用的如下   语法支持类         ONLY_FULL_GROUP_BY       对于 GROUP BY 聚合操作,如果在 SELECT 中的列...、HAVING 或者 ORDER BY 子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的     ANSI_QUOTES       启用 ANSI_QUOTES 后,不能用双引号来引用字符串...就会约束:当我们进行聚合查询的时候,SELECT 的列不能直接包含非 GROUP BY 子句中的列。

    2.8K10

    wm_concat()和group_concat()合并同列变成一行的用法以及和concat()合并不同列的区别

    原标题:oracle的wm_concat()和mysql的group_concat()合并同列变成一行的用法以及和concat()合并不同列的区别 前言 标题几乎已经说的很清楚了,在oracle中,concat...()函数和 “ || ” 这个的作用是一样的,是将不同列拼接在一起;那么wm_concat()是将同属于一个组的(group by)同一个字段拼接在一起变成一行。...mysql是一样的,只不过mysql用的是group_concat()这个函数,用法是一样的,这里就不过多介绍了。...aaabbbcccddd*/ ---- wm_concat()的使用 我看了大多数博客对wm_concat()这个个函数的介绍,我觉得都介绍的不是很完美,他们都是简单的说 这个是合并列的函数,但是我总结的概括为:把同组的同列字段合并变为一行...mysql是一样的用法,把wm_concat 换成 group_concat()就可以啦,具体可以参考这篇文章的使用:浅析MySQL中concat以及group_concat的使用 不知道大家学会这个wm_concat

    12.3K50

    理解group by

    表2   可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。...2.FROM test Group BY name:该句执行后,我们想象生成了虚拟表3,如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行...(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。...number列执行sum操作,即2+3,返回5,最后执行结果如下: (5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段...by 进行了非ANSI标准的扩展,允许select后含有非group by 的列。

    1.4K10

    group by如何优化?

    是统计的count(*) 个数 b、扫描表t1的索引a,依次取出叶子节点上的id值,计算id%10的结果,记为x;此时如果临时表中没有主键为x的行,就插入一个记录(x,1);如果表中有主键为x的行,就将...x这一行的c值加1; c、遍历完成后,再根据字段m做排序,得到结果集返回给客户端。...例如,我们有个表的记录id列是: 0,0,0,1,1,2,2,2,2,3,4,4, 当我们使用group by的时候,就直接从左到右,累计相同的值即可。这样就不需要临时表了。...上面的结构我们也不陌生,当我们以在某个数据列上创建索引的时候,这个列本身就是排序的,当group by是以这个列为条件的时候,那么这个过程就不需要排序,因为索引是自然排序的。...by对这个z列进行分组,可以看到,结果中已经没有临时表了。

    2.6K60

    Group by 分组详解

    表2   可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。...2.FROM test Group BY name:该句执行后,我们想象生成了虚拟表3,如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行...(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。...number列执行sum操作,即2+3,返回5,最后执行结果如下: (5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段...by 进行了非ANSI标准的扩展,允许select后含有非group by 的列。

    2.1K10

    神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列

    GROUP BY 后 SELECT 列的限制   标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM...为什么 GROUP BY 之后不能直接引用原表(不在 GROUP BY 子句)中的列 ? 莫急,我们慢慢往下看。...SQL 模式主要分两类:语法支持类和数据检查类,常用的如下   语法支持类         ONLY_FULL_GROUP_BY       对于 GROUP BY 聚合操作,如果在 SELECT 中的列...、HAVING 或者 ORDER BY 子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的     ANSI_QUOTES       启用 ANSI_QUOTES 后,不能用双引号来引用字符串...GROUP BY 子句中的列。

    3.2K20
    领券