数据库中的经常会用到要过滤某个列的最值数据,比如,取数量最大的值,取时间最早的值等等,下面我们就来看看如何运用这个最值函数,特别注意,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函数转换为数值型相关推荐

  1. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  2. linux文件字节函数,各位大侠:linux/unix下有什么双字节的字符类型及其一整套处理函数? 高分送出,请帮帮小弟!!!!!!...

    linux/unix下小弟需要操作双字节,相对单字节char 有什么双字节的字符类型及其一整套处理函数,如strstr(),strcpy(),strchr等功能相同的双字节操作函数,它用到什么头文件? ...

  3. 《JAVA练习题目8》 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number

    题目内容: 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number:方法:showMe,以"name-gende ...

  4. len函数python返回值类型_python的len函数为什么报错

    len函数返回序列类型对象(字符或字符串.元组.列表和字典等)的项目个数(长度). 语法len(object) 函数返回一个大于0的int型整数,表示对象的项目个数. 参数说明 举例 1. 当参数是序 ...

  5. python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法

    0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...

  6. Day04:函数参数、对象、嵌套、闭包函数和装饰器

    上节课复习:     1.什么是函数         函数就是具备某一功能的工具     2.为何用函数         1.程序的组织结构和可读性         2.减少代码冗余         ...

  7. c语言函数参数从右往左,C语言函数入参压栈顺序为什么是从右向左?

    看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...

  8. Python基础(可变数据类型不能做函数参数、装饰器、剥皮函数、时间间隔)

    1.可变数据类型不能做函数参数: 参数会动态改变 def func(a, l=[]):l.append(a)print(id(l))return lf1 = func(1) print(f1) # [ ...

  9. c语言main函数参数详解,c/c++程序main函数参数解析,以及参数传递的不同方法

    1. 程序运行时传递参数的不同方法: 1)通过命令参数传递参数: 2) 通过txt文件读取参数. 2. 方法举例 1)通过命令参数传递参数,即解析main函数的参数. main函数可以不带参数,也可以 ...

最新文章

  1. 全国计算机二级vfp知识点,全国计算机二级VFP知识点总结
  2. 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案 1
  3. 用链表生成前序二叉树
  4. 交换机的linux测试脚本,更新网络设备巡检脚本,各位大神可以看看,如有不足,请指正!...
  5. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )
  6. 音视频编解码的国际标准
  7. hdu 5254(暴力穷举)
  8. 华为鸿蒙os公测需要多久,华为系统公测到正式版要多久
  9. WDS系列--Windows Deployment Services概述篇
  10. Django设计理念
  11. The method getTextContent() is undefined ?
  12. MySQL索引的索引长度问题
  13. C# 特性(Attribute)学习
  14. Python:PyCharm提示Local variable ‘x‘ value is not used
  15. MySql免安装版绿化版安装配置,附MySQL服务无法启动解决方案
  16. 手机端判断触摸滑动方向
  17. 你可以对计算机进行设置 这样用户,win10登陆界面设置 win10登陆界面壁纸
  18. [笔记] Codeforces#274 Riding in a Lift (479E) DP
  19. 详解后端工程师必看学习路线图(含初、中、高阶)
  20. dubbo分布式服务框架(高级特性篇)

热门文章

  1. iOS App图标和启动画面(闪屏)尺寸
  2. html select ios 闪屏,移动端常见的兼容性问题.md
  3. 专访孙睿 :能做自己,去做自己想做的,是件挺幸福的事儿
  4. Python向上取整 向下取整的方法
  5. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)
  6. vue 打印页面(解决打印预览不全的问题)
  7. ae制h5文字动画_H5案例分享:CSS3 Animation动画
  8. 解决brew卡在Updating Homebrew...的正确姿势
  9. VMWare共享文件夹使用
  10. 华为路由器的路由条目的形成过程及说明总结