【问题标题】:why ALL(SELECT) doesn't work to get max value为什么 ALL(SELECT) 不能获得最大值
【发布时间】:2023-03-16 07:12:01
【问题描述】:

我正在 Hackerrank (Hackerrank Question) 的 Weather Observation Station 15 上工作

它问

查询 STATION 中小于 137.2345 的最大北纬 (LAT_N) 的西经 (LONG_W)。将您的答案四舍五入到小数位。

STATION 表有 5 列:ID、CITY、STATE、LAT_N、LONG_W。

以下是我的查询,我试图找出它为什么不起作用。

SELECT ROUND(LONG_W, 4) FROM STATION
WHERE LAT_N >= ALL(SELECT LAT_N FROM STATION WHERE LAT_N < '137.2345')

当我尝试不同的查询并且这有效时

SELECT ROUND(LONG_W, 4) FROM STATION
WHERE LAT_N = (SELECT MAX(LAT_N) FROM STATION WHERE LAT_N < '137.2345')

第一个查询有什么问题?谢谢。

【问题讨论】:

    标签: sql aggregation


    【解决方案1】:

    这个查询:

    SELECT ROUND(LONG_W, 4) FROM STATION
    WHERE LAT_N >= ALL(SELECT LAT_N FROM STATION WHERE LAT_N < '137.2345')
    

    将返回 LAT_N 大于或等于 '137.2345' 的所有行,因为它缺少附加条件。

    应该写成:

    SELECT ROUND(LONG_W, 4) FROM STATION
    WHERE LAT_N <  '137.2345'
      AND LAT_N >= ALL(SELECT LAT_N FROM STATION WHERE LAT_N < '137.2345')
    

    【讨论】:

      【解决方案2】:

      这个查询:

      select round (long_w,4)
      from station
      where lat_n<137.2345
      order by lat_n desc
      limit 1;
      

      首先,它选择所有 lat_n 小于 137.2345 的行。

      其次,它按 lat_n 降序排列结果,所以第一个 row 的最大 lat_n 小于 137.2345。

      第三,我设置了一个等于 1 的限制,只获取第一行,然后我使用 round 函数获取 long_w 的轮次。

      语法
      ROUND(数字、小数、运算)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 2011-08-19
        • 2021-11-29
        • 2020-09-06
        • 2018-06-18
        • 1970-01-01
        相关资源
        最近更新 更多