如何在MySQL中获取逗号分隔字段中的最大值?

如何在MySQL中获取逗号分隔字段中的最大值?,mysql,comma,Mysql,Comma,我有一个MySQL表,它有一个由逗号分隔的值组成的字段。如何获得最大值 例如: CREATE TABLE `test`.`scale` (`scale` VARCHAR(500)); INSERT INTO `test`.scale VALUES ('1,5,0.3,0.8,1'), ('0.5,0.7,0.1,0.3'), ('7,0.5,0.7,4'); 比例: 1,5,0.3,0.8,1 0.5,0.7,0.1,0.3 7,0.5,0.7,4 答复: 5 0.7 7 如何选

我有一个MySQL表,它有一个由逗号分隔的值组成的字段。如何获得最大值

例如:

CREATE TABLE `test`.`scale` (`scale` VARCHAR(500));

INSERT INTO `test`.scale 
VALUES 
('1,5,0.3,0.8,1'), 
('0.5,0.7,0.1,0.3'), 
('7,0.5,0.7,4');
比例:

1,5,0.3,0.8,1
0.5,0.7,0.1,0.3
7,0.5,0.7,4
答复:

5
0.7
7
如何选择此字符串中的最大值


不幸的是,我无法改变前一个人实现逗号分隔解决方案的方式。我希望有一个MySQL函数可以帮助我,否则我将不得不做一些乱七八糟的PHP工作。

我不相信SQL有一个拆分字符串的函数,但我还没有测试过

更深层次的原因是SQL非常希望您将数据存储在数据库中。在这种特殊情况下,这意味着每个字段都应该表示关于行主题的单个数据段

基本上,您需要将
scale
answer
存储在两个单独的表中,您可以使用每个表所属问题的ID相互匹配。“比例”将具有“每比例一行”选项,而不是“每比例一行”:

OPTIONS                     ANSWERS
question | scaleoption      question | answer
---------|------------      ---------|-------
       1 | 1.5                    1  | 5
       1 | .3                     2  | .7
       1 | .8               ... 
       1 | 1
       2 | .5
       2 | .7
...
然后,您可以使用查询
从问题=2的选项中选择max(scaleoption)来获取问题2的最大选项。此格式还允许您查找其中一个选项为1的所有问题,或者计算特定问题的选项数。它看起来更复杂,但它是一种灵活、可扩展、可移植的方式


如果要使用当前格式,必须返回整个字符串并用其他编程语言将其分解

在获取每一行并插入到一个新表的过程中,使用嵌套子字符串索引分隔每个逗号分隔的字段,然后从此新表中选择max,使用游标设置循环以对整个表重复此操作,并将每一行的max存储在一个新表中。最后从最终表中选择*

SELECT GREATEST(`scale`,0) as greatest_scale FROM `scale`;

这并不能完全回答问题,但这至少对整数列表有效。

不要以这种方式存储值:谢谢您回复我。不,它不是基于行的。我将用testcreate语句更新这个问题mysql没有拆分字符串的函数。其他数据库管理系统(如PostgreSQL)也有这种能力,可以将逗号分隔的列表转换为“表”。谢谢,我担心这是唯一的解决方案。这根本不能回答问题。您认为
最大(
scale
,0)
返回什么?试试看,它返回该列中逗号分隔整数的最大值。我在项目中使用它。表和列名与原始问题相关。
scale
不是逗号分隔的整数列表。它是一个由逗号分隔的整数列表组成的字符串。那么为什么不试试呢?没错,查询只返回列表()中的第一项。在我的例子中,第一项同时是列表中最大的,这只是巧合。然后你应该删除这个答案。