使用嵌套SELECT的MySQL create函数IF语句

使用嵌套SELECT的MySQL create函数IF语句,mysql,Mysql,在回答这个问题之前,让我说我以前很少有编程知识,并且是SQL的初学者 也就是说,我尝试在MySQL中创建一个函数,根据表中组的百分位数为一系列值分配索引。我已经完成的小组。我在每个组中进行了从1到n的计数,因此如果组1有100行,则ID从1到100,然后组2在1处重新启动,并增加到组2的最大值,以此类推,直到组10。我试图让我的函数根据这些组计算百分位数,取表中指定列的值,其中行等于百分位数截止值,然后根据给定给函数的值相对于这些截止值的位置分配索引。经过一些研究,我为第5组尝试了以下方法:

在回答这个问题之前,让我说我以前很少有编程知识,并且是SQL的初学者

也就是说,我尝试在MySQL中创建一个函数,根据表中组的百分位数为一系列值分配索引。我已经完成的小组。我在每个组中进行了从1到n的计数,因此如果组1有100行,则ID从1到100,然后组2在1处重新启动,并增加到组2的最大值,以此类推,直到组10。我试图让我的函数根据这些组计算百分位数,取表中指定列的值,其中行等于百分位数截止值,然后根据给定给函数的值相对于这些截止值的位置分配索引。经过一些研究,我为第5组尝试了以下方法:

  DELIMITER |
CREATE
  FUNCTION TEST(
      ECKS DOUBLE,
      INDEX INT) RETURNS INT
    BEGIN
      DECLARE
        indecks INT;
        IF ECKS <
          (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (20/100)), 0)))
          ) THEN
          SET indecks = 1;
        ELSEIF ECKS BETWEEN
          (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (20/100)), 0)))
          ) AND (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (40/100)), 0)))) THEN
          SET indecks = 2;
        ELSEIF ECKS BETWEEN
          (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (40/100)), 0)))
          ) AND (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (60/100)), 0)))) THEN
          SET indecks = 3;
        ELSEIF ECKS BETWEEN
          (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (60/100)), 0)))
          ) AND (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (80/100)), 0)))) THEN
          SET indecks = 4;
        ELSEIF ECKS   >
          (SELECT ECKS
          FROM indices table1
          WHERE (ID = (ROUND ((
            (SELECT MAX(ID) FROM indices table2 WHERE table1.group = 5
            ) * (80/100)), 0)))
          ) THEN
          SET indecks = 5;
        END IF;
        RETURN indecks;
      END | DELIMITER ;
我从中获取的IF语句中嵌套的SELECT语句的语法


他们自己的工作做得很好;也就是说,当我输入SELECTS作为查询时,它们返回我想要输入到函数中的值。函数本身会运行,但它会将每个非空值作为索引2返回,将每个空值作为索引5返回。空值不是问题,但我想知道为什么其他所有内容都变成了索引2。有人能告诉我哪里出了问题,以及如何解决这个问题吗?谢谢。

通常我会编辑SQL代码问题以使其可读,但这不值得+2次重复。请重新格式化代码以便更容易查看发生了什么?我的错误。我确实有一个坏习惯,我认为它对每个人来说都是清晰的,因为它对我来说是清晰的。这更好吗,或者你说的完全是其他的东西?使用SQL开发者格式化SQL。干杯xQbert。我以后会更好的。