MySQL max 和 MIN 函数显示 100 及以上作为最小值

Posted

技术标签:

【中文标题】MySQL max 和 MIN 函数显示 100 及以上作为最小值【英文标题】:MySQL max and MIN function showing 100 and above as minimum value 【发布时间】:2021-09-21 02:49:28 【问题描述】:

我进行了查询以显示数据库中的最大值和最小值,但它不能完美运行。如果我们有 100 及以上的值,则返回最低而不是 99 及以下

SELECT MIN(total) AS min, MAX(total) AS max  FROM `results` WHERE `term_id` = 2 AND  `class_id` = 8 AND `subject_id` = 152

结果

min     max     
100     96

这是我的表结构:

CREATE TABLE `results` (
  `rst_id` bigint(20) NOT NULL,
  `user_id` int(11) NOT NULL,
  `subject_id` int(11) NOT NULL,
  `first_test` varchar(2) DEFAULT NULL,
  `second_test` varchar(2) DEFAULT NULL,
  `exam` varchar(2) DEFAULT NULL,
  `total` varchar(3) NOT NULL,
  `position` int(11) DEFAULT NULL,
  `term_id` int(11) NOT NULL,
  `session_id` int(11) NOT NULL,
  `class_id` int(11) NOT NULL,
  `is_new` tinyint(1) DEFAULT '1',
  `is_upd` tinyint(1) NOT NULL DEFAULT '0',
  `date_declared` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `date_updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `declared_by` int(11) NOT NULL,
  `updated_by` int(11) DEFAULT NULL,
  `deleted` tinyint(1) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

【问题讨论】:

请提供原始表作为创建表和数据作为文本或小提琴。因为我认为你没有整数值,你可能有 char 或 varchar 这是一个链接小提琴db-fiddle.com/f/w19Edb3V9NNqSBuhtGWc3B/0 你得到了一个 varchar 的最小值和最大值(在你的小提琴中总计是 varchar,它应该是整数)。当你使用varchar时,100在96之前(低于),因为1在9之前,并且系统使用字母顺序,没有数字顺序 【参考方案1】:

我以为你有一个 varchar,它是按字典顺序排序的

使用

SELECT MIN(total + 0) AS min, MAX(total + 0) AS max  
FROM `results` 
WHERE `term_id` = 2 AND  `class_id` = 8 AND `subject_id` = 152

这会将其转换为数字

【讨论】:

以上是关于MySQL max 和 MIN 函数显示 100 及以上作为最小值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL greatest()和least()函数与MAX()和MIN()函数

26《MySQL 教程》聚合函数(聚合函数 MIN、MAX)

mysql中min和max查询优化

PHP利用rand(1,100)函数产生10个1~100之间的随机数

内置函数(max,min,zip)及文件处理

PHP程序实现利用rand(1,100)函数产生10个1~100之间的随机数