Sql server 如何在SQL Server中取消嵌套此查询?
我正在练习我在HackerRank上的SQL知识,我写了一个查询,我觉得它不应该嵌套,但我不知道如何优化它: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号气象观测站。有人能帮忙吗 编辑:
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接受了它,因为预期输出是一个最小结果。否则很危险,我同意。