我目前有一个名为观察的表格,每分钟更新一次,包括以下字段(其中包括);
time wind_speed_kn wind_dir_deg
2014-12-13 13:34:22 12.3 23
2014-12-13 13:35:17 9.5 55
2014-12-13 13:36:32 12.7 288
...
我有一个执行以下查询的php循环
set time_zone = "+9:30";
select speed_range, count(*) as count from
(SELECT CASE
WHEN max_gust_kn < 0.1 THEN '0'
WHEN max_gust_kn > 0.1 and max_gust_kn <= 5 THEN '0-5'
WHEN max_gust_kn > 10 and max_gust_kn <= 15 THEN '10-15'
WHEN max_gust_kn > 15 and max_gust_kn <= 20 THEN '15-20'
WHEN max_gust_kn > 20 THEN '>20'
END as speed_range from observations
where (wind_dir_deg > 303.75 and wind_dir_deg < 326.25) and date(time) = date(now()))
as wind_summaries group by speed_range
每次通过php循环时,度数的测试都会改变,所以我得到罗盘上每个点的结果(N,NNE,NE,ENE等)
这大部分工作正常..除了我有时会得到一些NULL结果,这会破坏我的索引。例如,如果我现在为其中一个罗盘点运行它,我会得到以下结果;
speed_range count
NULL 6
0 445
0-5 58
当我渲染windrose时,我将每个方向的第一个索引计为“平静”或“0”,但是这个空值正在混淆它以及以下索引......
知道查询有什么问题以及我如何摆脱这些NULL值?我不太了解sql并且只是从这里复制了一些示例以使查询正常工作...
如果你想看看我想要达到的目标,可以在http://weather.stormpilgrim.com/windrose.php看到windrose的最终结果。我认为除了这个查询之外一切都很好。
答案 0 :(得分:1)
NULL
值会由case
语句中的值引起。这是带有case
语句的子查询:
SELECT (CASE WHEN max_gust_kn < 0.1 THEN '0'
WHEN max_gust_kn > 0.1 and max_gust_kn <= 5 THEN '0-5'
WHEN max_gust_kn > 10 and max_gust_kn <= 15 THEN '10-15'
WHEN max_gust_kn > 15 and max_gust_kn <= 20 THEN '15-20'
WHEN max_gust_kn > 20 THEN '>20'
END) as speed_range
from observations
where (wind_dir_deg > 303.75 and wind_dir_deg < 326.25) and date(time) = date(now())
问题必定是max_gust_kn
可以是NULL
。您可以将其包含为有效值:
SELECT (CASE WHEN max_gust_kn < 0.1 THEN '0'
WHEN max_gust_kn > 0.1 and max_gust_kn <= 5 THEN '0-5'
WHEN max_gust_kn > 10 and max_gust_kn <= 15 THEN '10-15'
WHEN max_gust_kn > 15 and max_gust_kn <= 20 THEN '15-20'
WHEN max_gust_kn > 20 THEN '>20'
ELSE 'Missing'
END) as speed_range
或者更改where
以排除这种可能性:
where (wind_dir_deg > 303.75 and wind_dir_deg < 326.25) and
max_gust_kn >= 0 and
date(time) = date(now())