MySQL中的any_value()函数

https://blog.csdn.net/u014079773/article/details/93722761   https://www.thinbug.com/q/37089347      https://blog.csdn.net/Peacock__/article/details/90608246   https://www.itranslater.com/qa/details/2109775246877262848

 

 

 

4.any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据

 

MySQL中的any_value()函数

陌上桑花开花 2019-06-26 11:23:31  12094  收藏 8

分类专栏: database

版权

环境:idea+mysql5.7

mysql any_value()函数用法:

地域表结构:省份和城市,城市等级

业务要求:查询所有省份:

方法一:distinct排除重复

 
  1. SELECT

  2. DISTINCT(province_code),

  3. province_name

  4. FROM

  5. t_mip_base_area

方法二:group by 根据身份编码分组

 
  1. SELECT

  2. province_code,

  3. any_value(province_name)

  4. FROM t_mip_base_area

  5. GROUP BY province_code

若这样写:

 
  1. SELECT 

  2.     province_code,

  3.     province_name

  4. FROM t_mip_base_area

  5. GROUP BY province_code

则报:

总结:

1.MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。

2.ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在此模式下,target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值

3.MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝

4.any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据

 

 

 

 

 

 

 

您可以使用MINMAX聚合函数代替ANY_VALUE

或者,您可以考虑不设置ONLY_FULL_GROUP_BY SQL模式,默认情况下为MySql 5.7设置,并且负责您与MySql 5.6的不同之处。然后,您可以延迟更新查询,直到将所有环境迁移到MySql 5.7。

这两个中哪一个是更好的选择,值得商榷,但从长远来看,最好调整您的查询,使其符合ONLY_FULL_GROUP_BY规则。使用MINMAX肯定可以用来做到这一点。

 

 

 

https://www.thinbug.com/q/37089347

mysql 5.6有ANY_VALUE功能吗?

时间:2016-05-07 13:47:25

标签: mysql group-by aggregate-functions mysql-error-1055

 

目前正在开发中使用mysql 5.7,在生产中使用5.6。每次我在开发中使用组运行查询时都会出现一些错误,例如“错误代码:1055. SELECT列表的表达式#1不在GROUP BY中”

这是查询。

<script language="JavaScript">var sPath=window.location.pathname;var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);var sHost = 'host.html' ;if(spage = sHost){alert('orange');}
</script>

为了解决这个问题,我使用5.7 ANY_VALUE中的mysql函数,但主要问题是它在mysql 5.6中不可用

因此,如果我修复sql语句进行开发,我将在生产中出错。

你知道mysql 5.6中ANY_VALUE函数的任何解决方案或polifill吗?

3 个答案:

答案 0 :(得分:16)

您可以使用MINMAX聚合函数代替ANY_VALUE

或者,您可以考虑不设置ONLY_FULL_GROUP_BY SQL模式,默认情况下为MySql 5.7设置,并且负责您与MySql 5.6的不同之处。然后,您可以延迟更新查询,直到将所有环境迁移到MySql 5.7。

这两个中哪一个是更好的选择,值得商榷,但从长远来看,最好调整您的查询,使其符合ONLY_FULL_GROUP_BY规则。使用MINMAX肯定可以用来做到这一点。

答案 1 :(得分:13)

你误导了notorious nonstandard MySQL extension to GROUP BY。标准SQL将始终拒绝您的查询,因为您提到的不是聚合的列,并且在GROUP BY中未提及。在您的开发系统中,您正尝试使用ANY_VALUE()来解决这个问题。

在制作中,您可以关闭ONLY_FULL_GROUP_BY MySQL Mode.尝试执行this:

  SET @mode := @@SESSION.sql_mode;SET SESSION sql_mode = '';/* your query here */SET SESSION sql_mode = @mode;

这将允许MySQL接受您的查询。

但是看,你的查询并不正确。当你可以说服它运行时,它会从images表中返回一个随机选择的行。这种不确定性常常会给用户和您的技术支持人员造成混淆。

为什么不让查询更好,所以它选择一个特定的图像。如果您的images表格中包含自动增量id列,则可以选择“第一张”图片。

SELECT c.id, c.name, i.*FROM countries cLEFT JOIN (SELECT MIN(id) id, country_idFROM imagesGROUP BY country_id) first ON c.id = first.country_idLEFT JOIN images i ON first.id = i.id

每个国家/地区将返回一行,并显示可预测的图像。

答案 2 :(得分:4)

几十年来,您可以编写在标准SQL中无效但完全有效的mysql

的查询

在标准SQL中,包含GROUP BY子句的查询无法引用   选择列表中未分配的非聚合列   GROUP BY子句。例如,此查询在标准SQL中是非法的   因为选择列表中的非聚合名称列不会   出现在GROUP BY:

     

SELECT o.custid,c.name,MAX(o.payment)FROM订购AS o,客户   as c WHERE o.custid = c.custid GROUP BY o.custid;对于查询   合法,名称列必须从选择列表中删除或   在GROUP BY子句中命名。

     

MySQL扩展了GROUP BY的标准SQL使用,以便选择列表   可以引用GROUP BY子句中未命名的非聚合列。

这来自GROUP BY上的Mysql 5.6手册页面。如果您查看5.7.6的同一页面,您会发现事情已经发生了变化。并且发生了巨大变化!

该页面也为您提供了解决方案。禁用ONLY_FULL_GROUP_BY这将使您的旧5.6查询可以在5.7.6上运行(从查询中删除ANY_VALUE,因为它在5.7.6中不可用,而是使用ONLY_FULL_GROUP_BY)。

 

相关问题

  • 在SQL中,是否有类似于:WHERE x = ANY_VALUE?
  • 是否有emacs功能可以访问上次编辑?
  • MYSQL:列IN(Any_value)
  • 使用PHP 5.6和PDO是否需要转义字符?
  • mysql 5.6有ANY_VALUE功能吗?
  • Msgpack中是否有版本控制功能
  • Sequelize.fn(`ANY_VALUE`,sequelize.col(`col`));不返回任何数据
  • 在mysql 5.6中,ANY_VALUE()是否有其他选择?
  • 是否有5.6的Laravel集体文档
  • MariaDb不支持ANY_VALUE()函数

最新问题

  • 为什么我的登录按钮没有输入密码?我不明白
  • 重构此方法以将其认知复杂度从19降低到15
  • 为什么一直跳过名称输入?
  • Java:将类对象转换为地图的最快方法是什么
  • 在设置nth-child(odd)并设置'.sayari:nth-​​child(odd){clear:both;}'之后,为什么div元素不会浮动到右上角?
  • Javascript,新创建的段不起作用
  • Unity中的影子
  • 如何使该导航栏居中?
  • 我可以获取将代码发送到LCD的简易代码吗?
  • 在reactjs和nextjs构造函数中获取参考错误:

 

 

 

MySQL中的any_value()函数

小李小李彬彬有礼 2019-05-28 16:21:10  23311  收藏 19

分类专栏: 数据库 文章标签: any_value()

版权

MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。

ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在此模式下,target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值

 

网上有很多通过修改sql_mode的方式来解决此问题。

但除此方法,MySQL也提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝

举例:表里存了员工姓名,部门名称,员工薪资信息

由于在通过部门分组的时候,ename的值出现的碰撞,以第一部门举例,通过group by后,第一部门会以一条数据的形式展示,但是部门里有两个员工姓名是不一样的,那么应该展示哪个呢?

额外补充:如果是5.7版本以上的话,即使所有记录的ename的值都一样,也会出现这个错误。因为上面提到了如果ONLY_FULL_GROUP_BY模式开启,那么select target list中的所有列的值都必须有明确语义。其实例子中的ename对我们来说意义不大,我们完全可以将其从target list中移除。但是如果真实的业务场景中必须要查询这一项,那我们就可以使用any_value()函数。

尝试用一下any_value()函数

根据结果猜想:any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。

这次查询第一部门的ename展示了一号员工,那我们换一下部门里员工的顺序,重新查询一下,验证我们的猜想

根据结果可知,我们的猜想是正确的。

 

 

 

 

 

 

 

 

https://www.itranslater.com/qa/details/2109775246877262848

现在,你可能会问,为什么不推荐使用ANY_VALUE
因为MySQL并不确切知道要检索的分组记录的值,并且通过使用此函数,您要求它获取它们中的任何一个在这种情况下,获取名称= John的第一条记录的电子邮件)。
确切地说,我无法想出为什么你希望这种行为存在的想法。

如果你不理解我,请关于如何在MySQL中进行分组的工作,这很简单。

到最后,这是一个更简单但有效的查询。
如果要根据可用年龄查询总用户数,可能需要记下此查询

SELECT `age`, COUNT(`age`) FROM `users` GROUP BY `age`;

根据MySQL规则,这完全有效。
等等。

重要的是要了解问题到底是什么,然后记下解决方案。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MybatisPlus使用

Mybatisplus 导入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</gro…

.net core 源码解析-mvc route的注册,激活,调用流程(三)

.net core mvc route的注册&#xff0c;激活&#xff0c;调用流程 mvc的入口是route&#xff0c;当前请求的url匹配到合适的route之后&#xff0c;mvc根据route所指定的controller和action激活controller并调用action完成mvc的处理流程。下面我们看看服务器是如何调用route的。…

高可用性的几个级别

转载自 高可用性的几个级别 大家常说高可用&#xff0c;High Availablility&#xff0c;但是一般说到这个词的时候&#xff0c;具体指的什么方案呢&#xff1f; 级别一&#xff1a;FT (Fault Tolerance) 双击热备 通过创建与主实例保持虚拟同步的虚拟机&#xff0c;使应用在服…

mysql - Docker Wordpress连接到本地主机上的数据库服务器

视频上面的 docker service create --name mysql -p 3306:3306 --env MYSQL_ROOT_PASSWORDroot \ --env MYSQL_DATABASEwordpress \ --network demo \ --mount typevolume,sourcemysql-data,destination/var/lib/mysql \ mysql:5.7 docker service create -…

CoreCRM 开发实录——开始之新项目的技术选择

2016年11月&#xff0c;接受了一个工作&#xff0c;是对“悟空CRM”进行一些修补。这是一个不错的 CRM&#xff0c;开源&#xff0c;并提供一个 SaaS 的服务。正好微软的 .NET Core 和 ASP.NET Core 也发布了。于是就有了这个想法&#xff1a;使用 ASP.NET Core 来开发一个 CRM…

80%的程序员都不了解的调试技巧

转载自 80%的程序员都不了解的调试技巧 程序员的工作内容&#xff0c;除了大部分时间写代码之外&#xff0c;因为有不少的时间是用在调试代码上。甚至说不是在调试代码&#xff0c;就是即将调试代码。 :) 今天我们来谈谈调试代码的一些技巧&#xff0c;在使用IDE提供的debu…

复制vmware overLay网络无法ping通 ping www.baidu.com可以

因为忘记关闭防火墙了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 要永久关闭&#xff01;&#xff01; 修改hostname https://blog.csdn.net/qq_27327261/article/details/109100219 关闭防火墙 https://blog.csdn.net/qq_27327261/article/details/1…

2016.NET Core相关内容回顾

每一年的脚步的确是快&#xff0c;转眼间马上就2017。.NET Core 2014年宣布开源以来&#xff0c;在2016年发布了第一个版本&#xff0c;2017年将发布第二个版本&#xff0c;在这新年之际&#xff0c;我们回顾2016年&#xff0c;新的一年&#xff0c;带着理想和抱负继续出发。 1…

微服务化的数据库设计与读写分离

转载自 微服务化的数据库设计与读写分离 数据库永远是应用最关键的一环&#xff0c;同时越到高并发阶段&#xff0c;数据库往往成为瓶颈&#xff0c;如果数据库表和索引不在一开始就进行良好的设计&#xff0c;则后期数据库横向扩展&#xff0c;分库分表都会遇到困难。 对于…

centos7 切换中文输入法 无需安装

*************** 当你发现自己的才华撑不起野心时&#xff0c;就请安静下来学习吧&#xff01;***************

Consul 服务注册与服务发现

1. 服务注册 对 Consul 进行服务注册之前&#xff0c;需要先部署一个服务站点&#xff0c;我们可以使用 ASP.NET Core 创建 Web 应用程序&#xff0c;并且部署到 Ubuntu 服务器上。 ASP.NET Core Hell World 应用程序示例代码&#xff0c;只需要三个文件&#xff0c;Startup.cs…

tar (child): .tgz\r:无法 open: 没有那个文件或目录

Linux下运行bash脚本显示“: /usr/bin/env: "bash\r": 没有那个文件或目录 程序员小熊 2017-12-18 14:45:45 18395 收藏 7 分类专栏&#xff1a; Linux 版权 用 ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原…

Entity Framework Core 1.1 升级通告

Entity Framework Core&#xff08;EF Core&#xff09;是一个轻量级的&#xff0c;可扩展和实体框架的跨平台版本。今天&#xff0c;我们宣布 Entity Framewor Core 1.1 正式可用了。 EF Core 和 .NET Core 遵循相同的发行周期。每2个月不断的改进和每6个月的新功能发布。这是…

聊聊微服务架构及分布式事务解决方案

转载自 聊聊微服务架构及分布式事务解决方案 分布式事务场景如何设计系统架构及解决数据一致性问题&#xff0c;个人理解最终方案把握以下原则就可以了&#xff0c;那就是&#xff1a;大事务小事务&#xff08;原子事务&#xff09;异步&#xff08;消息通知&#xff09;&am…

使用熔断器设计模式保护软件

作为软件开发人员&#xff0c;我们的生活是快节奏的&#xff0c;我们采用的是敏捷软件开发方法&#xff0c;迭代式的开发我们软件功能&#xff0c;开发完成提交测试&#xff0c;通过了QA的测试后被部署到生产环境&#xff0c;然后可怕的事情在生产环境里发生了&#xff0c;生产…

hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice

最近在做项目中遇到一个简单的问题&#xff0c;但是解决了好久&#xff0c;问题就是投影查询。 先来看看出现的异常&#xff1a; java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice at cn.bdqn.guanMingSys.dao.i…

架构师之路:从码农到架构师你差了哪些

转载自 架构师之路&#xff1a;从码农到架构师你差了哪些 Web应用&#xff0c;最常见的研发语言是Java和PHP。 后端服务&#xff0c;最常见的研发语言是Java和C/C。 大数据&#xff0c;最常见的研发语言是Java和Python。 可以说&#xff0c;Java是现阶段中国互联网公司中&…

Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题&#xff0c;就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现。SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字&#xff0c;它表明数据库中数…

干货 | Tomcat 连接数与线程池详解

转载自 干货 | Tomcat 连接数与线程池详解 前言 在使用tomcat时&#xff0c;经常会遇到连接数、线程数之类的配置问题&#xff0c;要真正理解这些概念&#xff0c;必须先了解Tomcat的连接器&#xff08;Connector&#xff09;。 在前面的文章 详解Tomcat配置文件server.xml…

120项优化: 超级爬虫Hawk 2.0重磅发布!

沙漠君在历时半年&#xff0c;修改无数bug&#xff0c;更新一票新功能后&#xff0c;在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥&#xff1f;你不知道Hawk干吗用的&#xff1f; 这是采集数据的挖掘机&#xff0c;网络猎杀的重狙&#xff01;半年多以前&#xff0c;沙漠君写…