使用嵌套SELECT的MySQL create函数IF语句
在回答这个问题之前,让我说我以前很少有编程知识,并且是SQL的初学者 也就是说,我尝试在MySQL中创建一个函数,根据表中组的百分位数为一系列值分配索引。我已经完成的小组。我在每个组中进行了从1到n的计数,因此如果组1有100行,则ID从1到100,然后组2在1处重新启动,并增加到组2的最大值,以此类推,直到组10。我试图让我的函数根据这些组计算百分位数,取表中指定列的值,其中行等于百分位数截止值,然后根据给定给函数的值相对于这些截止值的位置分配索引。经过一些研究,我为第5组尝试了以下方法:使用嵌套SELECT的MySQL create函数IF语句,mysql,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语句的语法
他们自己的工作做得很好;也就是说,当我输入SELECTS作为查询时,它们返回我想要输入到函数中的值。函数本身会运行,但它会将每个非空值作为索引2返回,将每个空值作为索引5返回。空值不是问题,但我想知道为什么其他所有内容都变成了索引2。有人能告诉我哪里出了问题,以及如何解决这个问题吗?谢谢。通常我会编辑SQL代码问题以使其可读,但这不值得+2次重复。请重新格式化代码以便更容易查看发生了什么?我的错误。我确实有一个坏习惯,我认为它对每个人来说都是清晰的,因为它对我来说是清晰的。这更好吗,或者你说的完全是其他的东西?使用SQL开发者格式化SQL。干杯xQbert。我以后会更好的。