我有以下查询, 查询西经(LONG_W)中STATION中最大北纬度(LAT_N)小于137.2345 137.2345。将你的答案四舍五入到小数点后。 表STATION的模式是id,city,state,lat_N,long_w
这是我的代码,
SELECT LONG_W
FROM STATION
WHERE LAT_N IN
(SELECT ROUND(MAX(LAT_N), 4) FROM STATION WHERE LAT_N < 137.2345);
这不起作用,我在这里做错了什么。
答案 0 :(得分:1)
这里有几个问题。
首先,不能保证LAT_N中的值等于ROUND(LAT_N,4)。
78.123456 = ROUND(78.123456,4) --> FALSE
我认为不需要子查询。
纬度的最大值(以度为单位)将为90.我认为问题是要求LONG_W的值小于137.2345
我把这个问题看作是指定......
我会写这样的查询:
SELECT ROUND(MAX(s.lat_n),4) AS largest_lat_n
FROM station s
WHERE s.long_w < 137.2345
也许我正在读错的问题。 (这不是SQL问题,这是规范问题。)
如果问题是提问......
要在具有最大LAT_N的行上获取其他值,我可以执行以下操作:
SELECT ROUND(s.long_w,4)
FROM station s
WHERE s.long_w < 137.2345
ORDER BY s.lat_n DESC
LIMIT 1
如果我想使用子查询,我们可能会使用相同的LAT_N获得多行,并且其中一些LONG_W值可能大于137.2345
考虑一个包含值为:
的行的表LAT_N LONG_W
------- ---------
87.654321 131.313131
87.654321 140.404040
...并假设87.654321的值是LONG_W&lt;行的“最大”值。 137.2345。 (也就是说,没有其他行具有更大的LAT_N。)
考虑这句话的回报:
SELECT t.long_w
FROM ( SELECT MAX(s.lat_n) AS largest_lat_n
FROM station s
WHERE s.long_w < 137.2345
) s
JOIN station t
ON t.lat_n = s.largest_lat_n
这将返回行的两个。如果我们执行MAX()函数,我们将返回更高的值140.4040404值。这似乎与规范不符。为了防止返回更大的LONG_W值,我们需要在查询中添加谓词(WHERE子句中的条件)
WHERE t.long_w < 137.2345
或者,我们可以使用SELECT列表中的表达式来过滤掉不符合规范的LONG_W值
SELECT MAX( IF(t.long_w<137.2345,t.long_w,NULL) ) AS long_w
答案 1 :(得分:0)
从STATION中选择TRUNCATE(SUM(LAT_N),4) LAT_N> 38.7880并且LAT_N <137.2345;
答案 2 :(得分:0)
您应该ROUND
这样检索的值:
Select ROUND(LONG_W,4)
from STATION
where LAT_N = (
Select max(LAT_N)
from STATION where
LAT_N < 137.2345
);
答案 3 :(得分:0)
尝试一下。这很简单并且可以正常工作。
SELECT ROUND(LONG_W,4)
FROM STATION
WHERE LAT_N < 137.2345
ORDER BY LAT_N DESC LIMIT 1;
答案 4 :(得分:0)
SELECT ROUND(MAX(LONG_W), 4)
FROM STATION
WHERE LAT_N IN(
SELECT MAX(LAT_N)
FROM STATION
WHERE LAT_N < 137.2345
);
答案 5 :(得分:0)
您可以使用Oracle运行以下代码。
SELECT ROUND(LONG_W, 4)
FROM STATION
WHERE ROWNUM<2
AND LAT_N =(
SELECT MAX(LAT_N)
FROM STATION WHERE LAT_N < 137.2345
);
答案 6 :(得分:-1)
我解决了这个挑战! 试试这个...
SELECT ROUND(LONG_W, 4)
FROM STATION
WHERE LAT_N < 137.2345
ORDER BY LAT_N DESC
LIMIT 1;
这就是答案!用于 MySQL