首页 > 数据库 >MySQL中的any_value()函数

MySQL中的any_value()函数

时间:2023-01-16 11:22:05浏览次数:60  
标签:province code group 函数 value MySQL any

在工作中第第一次接触到any_value()函数,自己去了解这个函数的作用。

简单来说,在MySQL5.7之后,如果有使用group by 对字段A、B……分组,那么select后面的查询项必须包含group by分组字段A、B……,除了聚合函数以外,也就是聚合函数的查询字段可以不包含在group by当中。

使用any_value()函数,select查询的字段就可以不在group by分组字段当中,使用any_value()函数的字段会取分组当中的第一条数据,至于哪一条是第一条,现不了解其中的机制,我就理解为随机取一条数据。
当然如果这个字段全部值都相同,那就等于查询了这个字段。


假设有一个地域表结构:省份和城市,城市等级
image

从中查询所有省份

SELECT 
    province_code,
    province_name
FROM t_mip_base_area
GROUP BY province_code;

这样查询报错,因为select查询项有两个字段province_code、province_name,而group by 分组只有一个字段province_code
image

这样写,就不会报错,可以查询到结果

SELECT 
	province_code,
	any_value(province_name)
FROM t_mip_base_area
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()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据
————————————————
版权声明:本文为CSDN博主「陌上桑花开花」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014079773/article/details/93722761

标签:province,code,group,函数,value,MySQL,any
From: https://www.cnblogs.com/Uni-Hoang/p/17025504.html

相关文章

  • Mysql:索引失效的常见场景
    索引失效的常见场景不符合最佳左前缀原则比如说现在创建一个联合索引:index_union(name,age),然后你的select语句是这样的select*fromuserwhereage=18此情况下......
  • mysql mgr demo
    dockercompose配置services:db:container_name:mgr-db-0image:mysql:8.0restart:alwaysenvironment:MYSQL_ROOT_PASSWORD:'123456'......
  • Mysql:explain
    explainmysql提供了一种方式,目的是为了让我们知道sql的执行顺序、索引使用情况、执行效率的情况tabletable是展示执行计划过程中,会使用到的表。执行explain出现的每条......
  • 【学习日志】MySQL分表与索引的关系
    什么情况下需要分表呢?分表又能解决什么问题呢?一般情况下分表的直接原因是数据量太大了,比如一张表一共只有1w条数据,确实没必要分表。为什么数据量大了就需要分表呢?首先得看......
  • MySQL判断数据是不是存在的方法
        在mysql中,可以利用count()函数判断数据是否存在,该函数的作用就是用来统计表中记录数据,语法为“selectCOUNT(字段值)as字段名from表名where字段条件;”,......
  • ORA-06502: PL/SQL: 'Numeric or Value Error' When CLOB Convert to VARCHAR2 on a M
    OnadatabasewithmultibytecharactersetlikeAL32UTF8specifiedforNLS_CHARACTERSETthefollowingerrorisreceivedwhenaCLOBwhichcontainsmorethan819......
  • mysql--时间
    mysql时间相关类型:date//年月日2023-1-15time//时分秒10:10:10datetime//年月日时分秒2023-1-1510:10:10timestamp//时间戳,插入,更新时自动写入当前时间注......
  • 解决mysql输入密码无法登录的问题
    ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES)当我输入root登录输入密码就会出现这种错误,不输入密码就可以登录,不输入密码里面......
  • 开启wamp依旧使用已下载的mysql
    1.打开D:\Environment\wamp64\bin\mysql\mysql8.0.31,修改my.ini添加本机mysql密码,并且将3个port=3306改为port=33162.打开D:\Environment\wamp64\apps\phpmyadmin5.2.0,......
  • Windows 安装 MySQL
    转:Win10安装MySQL教程下载安装包https://dev.mysql.com/downloads/installer/安装选Custom模式:从可安装的产品(Products)中选择MySQLServer:点击绿色按钮,将......