【发布时间】:2019-08-18 23:54:11
【问题描述】:
我对 MySQL 比较陌生,我正在尝试编写一个函数来查找纬度列表的中位数。我在网上找到了几个不同的解决方案来解决这个问题,但我无法真正理解他们在做什么。我决定让一些东西更容易阅读和直观,但我似乎遇到了一些错误。基本上,该方法找到数字中最大一半的最小值和下半部分的最大值,然后将它们取平均值。这应该涵盖偶数和奇数长度的两种情况。
我尝试测试每一段代码,但出于某种原因,我认为我所有的错误都来自我试图找到中间值的第 6 行代码。我的案例需要涵盖偶数和奇数长度的列表,这就是我同时拥有med1 和med2 的原因。
这是我当前的代码:
SET @med1 = (SELECT min(lat_n)
FROM station
WHERE lat_n >= (SELECT lat_n
FROM station
ORDER BY lat_n ASC
LIMIT FLOOR((SELECT COUNT(*)/2 FROM station)), 1
)
);
SET @med2 = (SELECT max(lat_n)
FROM station
WHERE lat_n <= (SELECT lat_n
FROM station
ORDER BY lat_n DESC
LIMIT FLOOR((SELECT COUNT(*)/2 FROM station)), 1
)
);
select round((@med1 + @med2)/2,4)
以及错误信息:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '((SELECT COUNT(*)/2 FROM station)), 1
我已经单独检查了代码的每个小“位”(选择计数(*)、地板、限制),但由于某种原因,当它们全部放在一起时它不起作用。输出应该是表站中列 lat_n 的中值,但我收到了这个错误。非常感谢您。
【问题讨论】:
-
您可能需要分隔您的 SET 语句 - 添加“;”在每个末尾告诉 MySQL 你已经结束了一个语句。
-
@NevilleKuyt 刚刚尝试过但没有用,不过我会更新问题中的代码
标签: mysql sql syntax-error median