【问题标题】:How to use variable in LIMIT statement in MYSQL?如何在 MYSQL 的 LIMIT 语句中使用变量?
【发布时间】:2021-09-09 21:23:55
【问题描述】:

我正在尝试通过使用 order by 并返回 mid 元素来返回中位数。我使用限制来消除前半部分,然后返回 1 行,这将给出中位数。

   SELECT
     COUNT(*) into @cnt FROM STATION;
    SELECT ROUND(LAT_N,4) 
    FROM STATION
    ORDER BY LAT_N
    LIMIT 1 OFFSET ((@cnt-1)/2)

我收到错误:-

第 6 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的 '((@cnt-1)/2)' 附近使用正确的语法

总行数 = 499 所以如果我使用

SELECT
 COUNT(*) into @cnt FROM STATION;
SELECT ROUND(LAT_N,4) 
FROM STATION
ORDER BY LAT_N
LIMIT 1 OFFSET 250

我没有收到任何错误。那么为什么第一个错误呢?

【问题讨论】:

    标签: mysql sql limit offset median


    【解决方案1】:

    那么为什么第一个错误?

    好吧,如果你通过写作进行公平比较,你会得到一个错误..

    ... OFFSET ((501-1)/2)
    

    MySQL 5.5 之后可以参数化 LIMIT 和 OFFSET,如果你为它们传递整数变量

    设为OFFSET @cnt 并让您的前端为@cnt 进行计算

    【讨论】:

      【解决方案2】:

      我建议像这样修改您的查询:

      SELECT
       COUNT(*) into @cnt FROM STATION;
      SELECT ROUND(LAT_N,4) 
      FROM STATION
      ORDER BY LAT_N
      LIMIT 1 OFFSET (@cnt - 1) / 2 ROWS FETCH NEXT 2 - @cnt % 2 ROWS ONLY )
      

      【讨论】:

        猜你喜欢
        • 2010-09-19
        • 2017-07-29
        • 2017-05-11
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        相关资源
        最近更新 更多