MySQL“无效使用组函数”错误-HackerRank天气观测20

mspsb9vt  于 2022-12-10  发布在  Mysql
关注(0)|答案(2)|浏览(261)

我正在尝试使用MySQL解决来自HackerRank的天气观测20,我已经编写了以下代码

SET @row1 = 0, @row2 = 0;

SELECT IF(COUNT(LAT_N) MOD 2 = 0, 

          -- Ture clasue 
          (SELECT ROUND(t.LAT_N,4) 
          FROM (SELECT station.LAT_N, @row1:= @row1 + 1 AS row1 FROM station GROUP BY station.LAT_N) AS t
          WHERE t.row1 = ROUND(COUNT(t.row1) DIV 2,0)
          ), 

         -- False Clause
         (SELECT ROUND(AVG(t.LAT_N),4)
          FROM (SELECT station.LAT_N, @row1:= @row1 + 1 AS row1, @row2:= COUNT(LAT_N) - 1 AS row2 FROM station GROUP BY station.LAT_N) AS t
         WHERE t.row1 = ROUND(COUNT(t.row1) DIV 2,0) - 1
                        OR
               t.row2 = ROUND(COUNT(t.row2) DIV 2,0) + 1
         )
         )
FROM station;

但我得到了这个错误
第3行出现错误1111(HY000):无效使用组函数
你能帮我纠正一下吗?

cetgtptt

cetgtptt1#

我已经用以下代码自己解决了这个问题。

SET @row1 = 0;

SELECT ROUND(LAT_N,4)
FROM (SELECT t.row1, s.LAT_N FROM station AS s
     INNER JOIN (SELECT ID, @row1 :=@row1 + 1 AS row1 FROM station ORDER BY LAT_N) AS t ON s.ID=        t.ID) AS t2 
WHERE row1 = (SELECT ROUND(COUNT(LAT_N)/2,0) FROM station);

这不是最好的,但很有效,为了其他人的利益,这是我到目前为止所学到的试图解决代码的方法
1.我试图使用this YouTube视频中的逻辑来解决问题,但视频中的代码是针对SQL Server的,而我使用的是MySQL
1.HackerRank只测试奇数集的输入,这比求偶数集的中值要容易得多(这里我的代码仅限于奇数集)
1.作为一个新手,我不知道MySQL的执行顺序,于是捆绑了一大堆我认为是必要的代码。我能够通过将WHERE子句更改为HAVING子句来解决错误
1.在任务中发布的代码完全忽略了ORDER BY子句,它是解决方案背后的关键逻辑(如视频中所述),以及我切换到JOIN的原因(即使有更简单的解决方案也要保留逻辑)

mu0hgdu0

mu0hgdu02#

我已经用简单的代码解决了这个问题。您可以尝试以下操作:

Select round(S.LAT_N,4) from station AS S where (select count(Lat_N) from station where Lat_N < S.LAT_N ) = (select count(Lat_N) from station where Lat_N > S.LAT_N);

相关问题