Sql server 如何在SQL Server中取消嵌套此查询?

Sql server 如何在SQL Server中取消嵌套此查询?,sql-server,Sql Server,我正在练习我在HackerRank上的SQL知识,我写了一个查询,我觉得它不应该嵌套,但我不知道如何优化它: SELECT CAST(LONG_W as numeric(16, 4)) FROM STATION WHERE LAT_N = (SELECT MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780) 它在哈克朗克的17号气象观测站。有人能帮忙吗 编辑:

我正在练习我在HackerRank上的SQL知识,我写了一个查询,我觉得它不应该嵌套,但我不知道如何优化它:

SELECT 
    CAST(LONG_W as numeric(16, 4)) 
FROM 
    STATION 
WHERE 
    LAT_N = (SELECT MIN(LAT_N) 
             FROM STATION 
             WHERE LAT_N > 38.7780)
它在哈克朗克的17号气象观测站。有人能帮忙吗

编辑:这是来自HackerRank:

给定一个表站,其中包含ID、城市、州、北纬和西经五列的数据

+-------------+------------+
| Field       |   Type     |
+-------------+------------+
| ID          | INTEGER    |
| CITY        | VARCHAR(21)|
| STATE       | VARCHAR(2) |
| LAT_N       | NUMERIC    |
| LONG_W      | NUMERIC    |
+-------------+------------+
写一个查询,找到相应的西方经度,以北纬度中大于38.7780的最小值,最多小数点后4位。

可能是这样吗

DECLARE @lat INT;
SELECT @lat=MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780

SELECT cast(LONG_W as numeric(16, 4)) FROM STATION 
WHERE LAT_N = @lat
还是这个

SELECT cast(a.LONG_W as numeric(16, 4))
FROM STATION a
INNER JOIN (SELECT MIN(LAT_N) LAT_N FROM STATION WHERE LAT_N > 38.7780) b
ON a.LAT_N = b.LAT_N

如果您希望只有一条最小记录,请尝试此操作

SELECT top 1 cast(LONG_W as numeric(16, 4)) FROM STATION 
WHERE LAT_N > 38.7780 order by LAT_N asc

它仍然使用嵌套查询。此解决方案不起作用!因为原始查询可以有多个结果@Zoneh但是如果您有多条记录具有相同的
LAT\N
?这个查询不会返回所有结果,它只返回第一行(实际上一直只返回一行)。我在回答中提到,只有当预期输出是一个最小结果时,查询才会工作。你是对的,但hackerrank接受了它,因为预期输出是一个最小结果。否则很危险,我同意。