Mysql函数的创建和列中间值的选择

Posted

技术标签:

【中文标题】Mysql函数的创建和列中间值的选择【英文标题】:Mysql function creation and selection of middle value among columns 【发布时间】:2013-09-02 14:28:42 【问题描述】:

我需要在 mysql 中创建一个应该做以下事情的函数:

通过以下方式从表中选择 3 列值:

SELECT column1, column2, column3 FROM table WHERE id = value;

对这些列的值进行排序,以便知道最大、中间和最小。

返回值:(greatest+middle-least)/3

我的问题是双重的:

1) 有没有办法获得中间值,因为有 GREATEST() 和 LEAST()?

2) 为什么以下函数总是返回以下错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '2) 附近使用的正确语法;在第 27 行结束 $$ DELIMITER'

DELIMITER $$

CREATE FUNCTION abc_value(partita INT) 
RETURNS DOUBLE DETERMINISTIC
BEGIN
DECLARE a, b, c, column1, column2, column3 DOUBLE;
DECLARE a CURSOR FOR SELECT GREATEST(column1, column2, column3) FROM table where id = value;
DECLARE c CURSOR FOR SELECT LEAST(column1, column2, column3) FROM table where id = value;
DECLARE column1 CURSOR FOR SELECT column1 FROM table where id = value;
DECLARE quotax CURSOR FOR SELECT column2 FROM table where id = value;
DECLARE quota2 CURSOR FOR SELECT column3 FROM table where id = value;
IF column1<> a THEN
   IF column1<> b THEN 
      SET c = column1;
   END IF;
END IF;
IF column2<> a THEN
   IF column2<> b THEN 
      SET c = column2;
   END IF;
END IF;
IF column3<> a THEN
   IF column3<> b THEN 
      SET c = column3;
   END IF;
END IF;
RETURN ROUND((a+b-c)/3),2);
END$$
DELIMITER;

【问题讨论】:

如果中间值是指median,那么没有内置的 MySQL 函数可以进行该计算。如果你的意思是average,那就有。 【参考方案1】:

1) 如果您有 3 个项目并且想选择中间的一个,请执行以下操作:

SELECT
    value
FROM
    table
ORDER BY
    value
LIMIT 1,1 --index, amount (index starts from 0, so 1 is the second record)

【讨论】:

如果我理解得很好,当您从单个列中获得三个值时,您的解决方案就很好。否则,我有一行三列,我想从中选择中位数。但如果我不太明白,请告诉我。 是的,我的例子是取中间那个。对于中位数 - 检查this 答案。

以上是关于Mysql函数的创建和列中间值的选择的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 MySQL 存储聚合函数?

用JAVA调用Mysql数据库,数据存储过程的封装与调用;

MySQL高级存储过程/函数/触发器

mysql的执行insert是不是有返回值

MySQL 创建可以声明和设置选择结果的存储函数

mysql的执行insert是不是有返回值