Mysql:max函数参数为字符类型需要通过CAST函数转换为数值型
数据库中的经常会用到要过滤某个列的最值数据,比如,取数量最大的值,取时间最早的值等等,下面我们就来看看如何运用这个最值函数,特别注意,max函数或者min函数,参数都支持字符类型,这里就会有些坑存在,下面来实例描述下
一、应用场景
业务中的某张表,需要对时间分组后,取时间组内两个字段的最大值,那我们可以用max()函数对两个字段分别取最大值即可。
date | number | count |
2022-10-17 | 90 | 100 |
2022-10-17 | 8000 | 99 |
2022-11-17 | 1000 | 95 |
2022-11-17 | 800 | 198 |
2022-11-17 | 122 | 94 |
select month(date) as month ,max(number) as number, max(count) as count from T group by
month(date)
二、坑点
按这个sql得到的结果应该是有两条数据,分别是。按时间月份来分组,数据中有10与11月,所以两组,两组中,10月数据的number最大值为8000,count最大值为100,11月同理、(注意max函数只针对这一列数据进行求最大值,所以两列的最大值可能不是同一条数据的)
11 | 1000 | 198 |
10 | 8000 | 100 |
但是实际上我们得到的值是这样的:
11 | 800 | 95 |
10 | 90 | 99 |
这个结果是意想不到的,最后通过排查数据库的表结构设计发现,这两个字段的类型是字符类型,字符类型的排序就跟数值类型的排序就有很大差异了,这就是导致取最大值数据不符合原先设想的根因了
order by number (默认升序)得到结果如下:结果可以看出,字符类型的数值是从左往右一位位比较大小的,1>8>9所以,number字段中90就是最大值,10月则取的是90 ,11月同理解释
三、解决方案
- 将字段类型改成int,不用varchar类型
- 可以用CAST函数进行字段类型转换,sql如下:
select month(date) as month ,max(CAST(number as SIGNED)) as number, max(CAST(count as SIGNED)) as count from T group by
month(date)
总结:
- 用max函数时要注意参数的数据类型,会导致结果与设想不一致,切入点可以从字段的类型入手进行排查问题
- 通过 cast(value as type)或者convert(value,type)进行类型转换,转换以下几种类型:
binary:二进制类型;
char:字符类型;
date:日期类型;
time:时间类型;
datetime:日期时间类型;
decimal:浮点型;
signed:整型;
unsigned:无符号整型。
Mysql:max函数参数为字符类型需要通过CAST函数转换为数值型相关推荐
- 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...
- linux文件字节函数,各位大侠:linux/unix下有什么双字节的字符类型及其一整套处理函数? 高分送出,请帮帮小弟!!!!!!...
linux/unix下小弟需要操作双字节,相对单字节char 有什么双字节的字符类型及其一整套处理函数,如strstr(),strcpy(),strchr等功能相同的双字节操作函数,它用到什么头文件? ...
- 《JAVA练习题目8》 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number
题目内容: 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number:方法:showMe,以"name-gende ...
- len函数python返回值类型_python的len函数为什么报错
len函数返回序列类型对象(字符或字符串.元组.列表和字典等)的项目个数(长度). 语法len(object) 函数返回一个大于0的int型整数,表示对象的项目个数. 参数说明 举例 1. 当参数是序 ...
- python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法
0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...
- Day04:函数参数、对象、嵌套、闭包函数和装饰器
上节课复习: 1.什么是函数 函数就是具备某一功能的工具 2.为何用函数 1.程序的组织结构和可读性 2.减少代码冗余 ...
- c语言函数参数从右往左,C语言函数入参压栈顺序为什么是从右向左?
看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...
- Python基础(可变数据类型不能做函数参数、装饰器、剥皮函数、时间间隔)
1.可变数据类型不能做函数参数: 参数会动态改变 def func(a, l=[]):l.append(a)print(id(l))return lf1 = func(1) print(f1) # [ ...
- c语言main函数参数详解,c/c++程序main函数参数解析,以及参数传递的不同方法
1. 程序运行时传递参数的不同方法: 1)通过命令参数传递参数: 2) 通过txt文件读取参数. 2. 方法举例 1)通过命令参数传递参数,即解析main函数的参数. main函数可以不带参数,也可以 ...
最新文章
- 全国计算机二级vfp知识点,全国计算机二级VFP知识点总结
- 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案 1
- 用链表生成前序二叉树
- 交换机的linux测试脚本,更新网络设备巡检脚本,各位大神可以看看,如有不足,请指正!...
- 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )
- 音视频编解码的国际标准
- hdu 5254(暴力穷举)
- 华为鸿蒙os公测需要多久,华为系统公测到正式版要多久
- WDS系列--Windows Deployment Services概述篇
- Django设计理念
- The method getTextContent() is undefined ?
- MySQL索引的索引长度问题
- C# 特性(Attribute)学习
- Python:PyCharm提示Local variable ‘x‘ value is not used
- MySql免安装版绿化版安装配置,附MySQL服务无法启动解决方案
- 手机端判断触摸滑动方向
- 你可以对计算机进行设置 这样用户,win10登陆界面设置 win10登陆界面壁纸
- [笔记] Codeforces#274 Riding in a Lift (479E) DP
- 详解后端工程师必看学习路线图(含初、中、高阶)
- dubbo分布式服务框架(高级特性篇)
热门文章
- iOS App图标和启动画面(闪屏)尺寸
- html select ios 闪屏,移动端常见的兼容性问题.md
- 专访孙睿 :能做自己,去做自己想做的,是件挺幸福的事儿
- Python向上取整 向下取整的方法
- 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)
- vue 打印页面(解决打印预览不全的问题)
- ae制h5文字动画_H5案例分享:CSS3 Animation动画
- 解决brew卡在Updating Homebrew...的正确姿势
- VMWare共享文件夹使用
- 华为路由器的路由条目的形成过程及说明总结