如果值不存在则显示它?

时间:2014-03-28 08:59:24

标签: mysql

我有一个气象站,将风速和方向发送到mysql数据库。我正在尝试显示玫瑰图,但为此我需要以特定格式显示数据。

我有以下查询:

select windspeed/10,wind_dir from weather
where windspeed/10 < 0.5
and
date >= NOW() - INTERVAL 1 DAY

返回:

 windspeed      wind_dir
  0.4           nne
  0.1           ese
  0.2           e
  0.2           sw
  0.7           w
  1.0           ssw

为了正确显示数据,我需要显示不存在的条目的风向,即0表示n,0表示se,0表示ne等

所以

windspeed      wind_dir
  0.4           nne
  0.1           ese
  0.2           e
  0.2           sw
  0.7           w
  1.0           ssw
  0             se
  0             ne
  0             n
所有其他风向的等等等。

这可以在mysql查询中做到吗?

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT DISTINCT(w1.wind_dir) AS dir, IFNULL(ws/10,0) AS speed FROM weather w1 LEFT JOIN (
select windspeed as ws, wind_dir as wd from weather w2 
    where w2.windspeed/10 < 0.5
      and w2.date>=NOW()-INTERVAL 1 DAY
) wth ON w1.wind_dir=wd;

这将要求每个风向至少在表格中存在一次。

首先在表格中查找所有不同的wind_dir值。然后它将这些结果与日期在1天内的结果相结合,以确保包含所有不同的风向。最后,它将windspeed的任何空值换成0,因为丢失的记录将显示为null windspeed(ws)值。

答案 1 :(得分:0)

希望这适用于您的场景:

select ifnull(windspeed/10,0),wind_dir from weather
where windspeed/10 < 0.5
or windspeed = 0
and date >= NOW() - INTERVAL 1 DAY

答案 2 :(得分:0)

确定。以下是我认为可以解决的问题:

将wind_direction取出到新表并与天气建立FK关系
填写所有可能的方向,如n,e,s,w,ne,nw,se,sw

使用wind_direction的左连接天气表。

以下是示例查询:

SELECT IFNULL(wind_speed/10,0),wind_direction 
FROM wind_direction wd
LEFT JOIN weather w ON w.wind_direction_id=wd.id 
WHERE windspeed/10 < 0.5
AND date >= NOW() - INTERVAL 1 DAY