MySQL中的any_value()函数

硅谷探秘者 Md 数据库 3782 0 0

有如下数据:

mysql> select * from area;
+----+----------------+----------------+-----------+-----------+
| id | proviance_code | proviance_name | city_code | city_name |
+----+----------------+----------------+-----------+-----------+
|  1 |              1 | 河南           |         1 | 商丘      |
|  2 |              1 | 河南           |         2 | 南阳      |
|  3 |              1 | 河南           |         3 | 开封      |
|  7 |              2 | 杭州           |         1 | 余杭区    |
|  8 |              2 | 杭州           |         2 | 拱墅区    |
|  9 |              2 | 杭州           |         3 | 下城区    |
+----+----------------+----------------+-----------+-----------+
6 rows in set (0.00 sec)

要求查询所有的省份

方案1

SELECT DISTINCT(proviance_code),proviance_name from area;

方案2

SELECT proviance_code,any_value(proviance_name) from area GROUP BY proviance_code;

mysql5.7以及之前还可以用以下sql:

SELECT proviance_code,proviance_name from area GROUP BY proviance_code;

但是mysql5.7之后会报错:

SELECT proviance_code,proviance_name from area GROUP BY proviance_code
> 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'area.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
> 时间: 0.016s

  原因:MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在此模式下,target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值。
  any_value:MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝,any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
数据库基础 2525 sql常用
weblog 2262 一个案例说明#includeiostreamusingnamespacestd;/**定义指针*///typedef声明为一个指针类型MethodPointer//int为指针指向返回
数据库 790 语法:YEARWEEK(date)或YEARWEEK(date,firstdayofweek)参值date:需要。从提取年和周日期或日期时间值firstdayofweek:可选,指定星期几
前端,javascript 914 比较点 普通 箭头 简写 箭头如果没有参,同时返回值只有一句,则{}和return都可以省略。 this指向 this总是指向调用它对象,如果作为构造
weblog 1763 SelectORD(‘a’)-:973.CONV(N,from_base,to_base)对字n进制转换,并转换为字串返回,N是要转换据,from_base是原进制,to_base是目标进制。selectCO
数据库基础 1979 '%from_str%'说明:table_name——表名字field_name——字段名from_str——需要替换字符串to_str——替换成字符串
weblog 1004 mysql类型范围MySQL支持多种据类型,大致可以分为三类:值、日期/时间和字符串(字符)类型。其,整类型包括:TINYINT、SMALLINT、MEDIUMINT、INT和
数据库基础 3728 产生原因:据库时区不一致解决办法:在据库链接加:&serverTimezone=Asia/Shanghaiurl:jdbc:mysql://localhost:3306/test
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。