我正在尝试使用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):无效使用组函数
你能帮我纠正一下吗?
2条答案
按热度按时间cetgtptt1#
我已经用以下代码自己解决了这个问题。
这不是最好的,但很有效,为了其他人的利益,这是我到目前为止所学到的试图解决代码的方法
1.我试图使用this YouTube视频中的逻辑来解决问题,但视频中的代码是针对SQL Server的,而我使用的是MySQL
1.HackerRank只测试奇数集的输入,这比求偶数集的中值要容易得多(这里我的代码仅限于奇数集)
1.作为一个新手,我不知道MySQL的执行顺序,于是捆绑了一大堆我认为是必要的代码。我能够通过将WHERE子句更改为HAVING子句来解决错误
1.在任务中发布的代码完全忽略了ORDER BY子句,它是解决方案背后的关键逻辑(如视频中所述),以及我切换到JOIN的原因(即使有更简单的解决方案也要保留逻辑)
mu0hgdu02#
我已经用简单的代码解决了这个问题。您可以尝试以下操作: