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

时间:2014-04-23 14:24:36

标签: mysql

为了预先提出这个问题,我想说我之前的编程知识很少,而且我是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语句的语法

http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html

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

0 个答案:

没有答案