gpt4 book ai didi

mysql - 知道一行是否有最低的列?

转载 作者:行者123 更新时间:2023-11-29 10:40:45 24 4
gpt4 key购买 nike

我正在编写一个查询,根据行的当前值更新行。
我要检查的条件之一是“如果我要更新的特定行有一列是表中具有 4 个相同行值的其他行中的最低值”。

所以..例如,我的表结构是这样的:

INTEGER id - PRIMARY KEY
FLOAT lookup
VARCHAR(128) option1
INTEGER option2
INTEGER option3
INTEGER option4

我想知道我正在更新的行是否是与相同匹配的所有其他行中查找值最低的行option1option2option3option4 值。

如何在单个查询中实现这样的事情?我试图最大限度地减少查询并充分利用单个查询,因此我无法使用我的前端来实现此目的。我可以使用子查询,并且查询的字符数限制为 8192 个字符。

编辑:
示例行:

id | lookup | option1 | option2 | option3 | option4
1 | 1.000 | "a" | 2 | 1 | 4
2 | 1.100 | "a" | 1 | 1 | 2
3 | 1.200 | "a" | 1 | 1 | 1
4 | 1.250 | "a" | 1 | 1 | 1
5 | 1.300 | "a" | 1 | 1 | 1

我想要完成的查询:

UPDATE table SET option2 = IF_LOWEST_IN_TABLE(lookup)? LOWEST:NOT_LOWEST WHERE option1 = "a";

LOWEST 部分应该发生在 id 1、2 和 3 的行上。IF_LOWEST_IN_TABLE 和三元运算符是“占位符”,因为我不知道在SQL中应该如何实现。

最佳答案

您可以使用加入分组依据:

UPDATE table t JOIN
(SELECT min(id) as minid, option1, option2, option3, option4
FROM t
GROUP BY option1, option2, option3, option4
) tt
ON t.id = tt.minid
SET t.option2 = LOWEST
WHERE option1 = 'a';

编辑:

如果您想设置LOWESTNOT LOWEST,请使用LEFT JOIN:

UPDATE table t LEFT JOIN
(SELECT min(id) as minid, option1, option2, option3, option4
FROM t
GROUP BY option1, option2, option3, option4
) tt
ON t.id = tt.minid
SET t.option2 = (CASE WHEN tt.minid IS NOT NULL THEN LOWEST ELSE NOT_LOWEST END)
WHERE option1 = 'a';

关于mysql - 知道一行是否有最低的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45533853/

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