gpt4 book ai didi

mysql - 从多列中选择 3 个最小值

转载 作者:行者123 更新时间:2023-11-29 12:32:00 25 4
gpt4 key购买 nike

ID COL1 COL2 COL3 COL4 COL5 COL6 COL7
-------------------------------------
1 4 13 8 0 9 11 2
2 12 3 3 10 17 12 9
3 17 0 0 19 3 1 3
4 5 0 16 0 9 11 2

这是一个示例数据表。

我需要做的是选择并标记每行中的三个最小值,以便我可以识别每个值。

例如,我想知道 Row2 中的三个最小值是 3,3,9,并且它们位于 COL2,COL3,COL7

我想我需要合并mysql中提供的LEAST()命令,但它似乎只返回一个值(最小的一个)。

SELECT LEAST(COL1,COL2,COL3,COL4,COL5,COL6,COL7)

我似乎不知道如何获得 3 个最小值,而不是只有一个。

最佳答案

不幸的是你的表没有标准化:(

在这种情况下,可能的解决方案是使用如下查询对表进行逆透视:

CREATE VIEW unpivoted AS
SELECT id, 'col1' colname, col1 as value FROM Table1
UNION ALL
SELECT id, 'col2' colname, col2 FROM Table1
UNION ALL
SELECT id, 'col3' colname, col3 FROM Table1
UNION ALL
SELECT id, 'col4' colname, col4 FROM Table1
UNION ALL
SELECT id, 'col5' colname, col5 FROM Table1
UNION ALL
SELECT id, 'col6' colname, col6 FROM Table1
UNION ALL
SELECT id, 'col7' colname, col7 FROM Table1

然后使用如下所示的查询来查找 3 个最小值,然后将结果转回原处:

SET @x = 0;
Set @lastid = -999;

SELECT id,
min( IF( x = 0, colname, null )) As Colname1,
min( IF( x = 0, value, null )) As value1,
min( IF( x = 1, colname, null )) As Colname2,
min( IF( x = 1, value, null )) As value2,
min( IF( x = 2, colname, null )) As Colname3,
min( IF( x = 2, value, null )) As value3
FROM (
SELECT id, colname, value,
IF( @lastid = id, @x:=@x+1,
IF( (@lastid:=id), @x:=0, @x:=0 )
) As x
FROM unpivoted
ORDER BY id, value
) q
WHERE x < 3
GROUP BY id

演示:http://sqlfiddle.com/#!2/f20ee4/5
但这些查询的速度会非常慢,甚至不要在大表上尝试它们。
您需要规范化表格。

关于mysql - 从多列中选择 3 个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com