gpt4 book ai didi

mysql - 使用MySQL函数找出表中的最大记录

转载 作者:行者123 更新时间:2023-11-29 15:10:35 26 4
gpt4 key购买 nike

我正在使用 MySQL 函数来查找下表中的最大记录。

SQL 数据:

id_  index  Value1  Value2  Value 3  Max_idVal
1 'abc' 5 10 5 5
1 'abc' 0 12 4 5
1 'abc' 0 13 3 5
2 'abc' 4 9 10 8
2 'abc' 8 10 8 8

Max_idVal是MySQL函数返回的结果。这个想法是遍历每一行并将最大值放入 Max_idVal 中。该行的字段。

这里是ID_ 1、Value1是“5”处的最大值。它被分配给 Max_idVal'. This works the same way for ID_` 2 和其余行。

SQL 函数:

    DELIMITER $$
CREATE FUNCTION `fn_get_max` (
_id INT,
_index VARCHAR( 30 )
) RETURNS INT( 11 ) READS SQL DATA BEGIN DECLARE r INT;

SELECT Max(value1 )
INTO r
FROM Table_name
WHERE id = _id
AND index = _index;

RETURN r;

END $$

SQL 查询:

  UPDATE table_name SET max_idval = fn_get_max('1','abc') WHERE id = '1'

我的问题是这会返回 NULL行,即使 ID 与记录匹配。

我做错了什么?

最佳答案

我发现有几个问题:

首先,索引这个词是保留的,所以在你的函数中你应该使用index

其次,在提供的更新语句中,您的 WHERE 子句应该是 id_ = 1,而不是 id = 1。我使用以下代码重新创建了您的表和函数:

    DELIMITER $$
DROP FUNCTION IF EXISTS `test`.`fn_get_max`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `fn_get_max2`( _id INT,
_index VARCHAR( 30 )) RETURNS INT(11)
BEGIN
DECLARE r INT;


SELECT MAX(value1 )
INTO r
FROM test_table
WHERE id_ = _id
AND `INDEX` = _index;
RETURN r;

END$$

DELIMITER ;

然后使用以下更新语句正确更新 max_idval。

UPDATE test_table SET max_idval = fn_get_max2('1','abc') WHERE id_ = '1'

如果这只是一次性更新,您可以使用临时表更有效地完成此操作(因为 MySQL 不允许表在更新查询中连接到自身):

CREATE TEMPORARY TABLE tmp (id_ INT, maxvalue1 INT);

INSERT INTO tmp (id_, maxvalue1)
SELECT id_, MAX(Value1) AS max_value1
FROM test_table
GROUP BY id_;


UPDATE test_table, tmp SET test_table.Max_idVal = tmp.maxvalue1
WHERE test_table.id_ = tmp.id_

这应该正确更新所有行。

关于mysql - 使用MySQL函数找出表中的最大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666651/

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