资讯专栏INFORMATION COLUMN

Mysql无法选取非聚合列

KnewOne / 1521人阅读

摘要:教程所示图片使用的是仓库图片,网速过慢的朋友请移步原文无法选取非聚合列。如果当前文章的索引值是,那么可以通过以下命令来得到前后相邻的篇文章无法选取聚合列在执行上面命令时,给了我个的报错。

教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 无法选取非聚合列。

更多讨论或者错误提交,也请移步。

1. 前言

最近升级博客,给文章页面底部增加了两个按钮,可以直接跳转到上一篇和下一篇。如下图所示:

实现这个功能的难点在于:_数据库怎么选取出一条记录的前后两条相邻的记录?_
2. 数据库设计

关于我文章数据库的设计如下图所示:

可以看到,每条记录的身份是索引Id。因为之前有很多文章记录被删除了,所以,Id并不是连续的。

如果当前文章的索引值是33,那么可以通过以下命令来得到前后相邻的 2 篇文章:

select * from passage where id in
(select
case
when SIGN(id - 32 )>0 THEN MIN(id)
when SIGN(id - 32 )<0 THEN MAX(id)
end
from passage
where id != 34
GROUP BY SIGN(id- 32 )
ORDER BY SIGN(id- 32 )
)
ORDER BY id;
3. 无法选取聚合列

在执行上面命令时,Mysql给了我个: SELECT list is not in GROUP BY clause ... 的报错。经过 Google 得知,mysql 5.7以上,默认启动了only_full_group_by,MySQL 就会拒绝选择列表、条件或顺序列表引用的查询。

以下是原文:

Reject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on (uniquely determined by) GROUP BY columns.
As of MySQL 5.7.5, the default SQL mode includes ONLY_FULL_GROUP_BY. (Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.)

所以,我们应该设置sql_mode不包含only_full_group_by选项

进入 mysql 配置文件,在[mysqld]部分中添加以下配置,并且重启 mysql 即可。

[mysqld]
# ... other config
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # delete "only_full_group_by"
# ... other config

运行本文第二部分的 mysql 的命令,结果如下图所示:

4. 相关链接

only_full_group_by

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/48014.html

相关文章

  • Mysql梳理1

    摘要:数据表的名称命名要求与数据库名一样,由任意字母数字下画线和美元符号组成,但表名不能由单独的数字组成,也不能为的关键字而且长度还不能超过个字符。许多禁止在视图查询中使用子句。为了禁止在视图上执行操作,可以在建立视图时设置约束。 DCL Data Control Language(数据库的系统管理员)控制用户的访问权限。使用语句包括grant[授权]、revoke[回收权限] eg1:创建...

    jkyin 评论0 收藏0
  • 【数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算

    摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...

    The question 评论0 收藏0
  • 影响数据检索效率的几个因素

    摘要:数据检索有两种主要形态。所以,回归本质,影响数据检索效率的就那么几个因素。数据检索干的是什么事情定位加载变换找到所需要的数据,把数据从远程或者磁盘加载到内存中。减少的数据量的两个手段,聚合和抽样。 数据检索有两种主要形态。第一种是纯数据库型的。典型的结构是一个关系型数据,比如 mysql。用户通过 SQL 表达出所需要的数据,mysql 把 SQL 翻译成物理的数据检索动作返回结果。第...

    hellowoody 评论0 收藏0
  • 影响数据检索效率的几个因素

    摘要:数据检索有两种主要形态。所以,回归本质,影响数据检索效率的就那么几个因素。数据检索干的是什么事情定位加载变换找到所需要的数据,把数据从远程或者磁盘加载到内存中。减少的数据量的两个手段,聚合和抽样。 数据检索有两种主要形态。第一种是纯数据库型的。典型的结构是一个关系型数据,比如 mysql。用户通过 SQL 表达出所需要的数据,mysql 把 SQL 翻译成物理的数据检索动作返回结果。第...

    rollback 评论0 收藏0
  • MySQL基础语法

    摘要:注表名和列名尽量避免使用关键字一常用语句语句创建数据库删除数据库创建表产品购买数量总价格下单时间修改时间查看表信息查看创建语句删除表修改表添加列用户删除列修改列定义总价元修改列定义及列名购买数量添加普通索引删除普通索引添加唯一索引修改表名跨 注:表名和列名尽量避免使用MySQL关键字 一、常用SQL语句 1.DDL语句 create, alter, drop # 创建数据库 creat...

    jsbintask 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<