【问题标题】:MySQL: Finding the median using a "two halves" methodMySQL:使用“两半”方法查找中位数
【发布时间】:2019-08-18 23:54:11
【问题描述】:

我对 MySQL 比较陌生,我正在尝试编写一个函数来查找纬度列表的中位数。我在网上找到了几个不同的解决方案来解决这个问题,但我无法真正理解他们在做什么。我决定让一些东西更容易阅读和直观,但我似乎遇到了一些错误。基本上,该方法找到数字中最大一半的最小值和下半部分的最大值,然后将它们取平均值。这应该涵盖偶数和奇数长度的两种情况。

我尝试测试每一段代码,但出于某种原因,我认为我所有的错误都来自我试图找到中间值的第 6 行代码。我的案例需要涵盖偶数和奇数长度的列表,这就是我同时拥有med1med2 的原因。

这是我当前的代码:

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


【解决方案1】:

cannot use calculations 或 LIMIT 子句中的变量。有解决方法(可在链接中找到)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2017-08-05
    • 2021-12-02
    • 2020-01-16
    • 2015-07-08
    • 2011-09-05
    • 2011-07-16
    相关资源
    最近更新 更多