根据以下两个表:
* 数据表:
* 标准划分表:
需求:
根据‘数据表’中的各项的数据,查询得到相对应的划分标准。在‘标准划分表’中,数据<min_value显示为‘正常’,在max_value和min_value之间的数据,显示相对应的item_tips字段内容。
最开始不了解case ... when ... then ...else ... end语句中是否可以嵌套复杂的if ... elseif ... end if语句,所以写成了“方式一”的样子,然后提示ELSEIF处发生错误,也就是不能使用该语句。然后改成了“方式二”的样子。
方式一:
min_min_value_3, // 当item_type = 3 时,min_value列的最小值
max_min_value_3, // 当item_type = 3 时,min_value列的最大值
max(
CASE
s.item_type
WHEN 3
THEN
IF(pm25 >= min_min_value_3 AND pm25 < max_min_value_3,s.item_tips)
ELSEIF(pm25 < min_min_value_3,'正常' )
ELSEIF(pm25 > max_min_value_3,'超标' )
END IF
ELSE 0
END ) pm25_tip,
方式二:
SELECT
d.id,
device_id,
temperature,
humidity,
d.create_time,
d.update_time,
d.create_by,
methanal,
max( CASE s.item_type WHEN 1 THEN IF ( methanal >= s.min_value, s.item_tips, '正常' ) ELSE 0 END ) methanal_tip,
co2,
max( CASE s.item_type WHEN 2 THEN IF ( co2 >= s.min_value, s.item_tips, '正常' ) ELSE 0 END ) co2_tip,
pm25,
max(
CASE
s.item_type
WHEN 3
THEN
IF(pm25 >= s.min_value AND pm25 <= s.max_value,s.item_tips,IF( pm25 < s.min_value, '正常', '超标' ) )
ELSE 0
END ) pm25_tip,
tvoc,
max( CASE s.item_type WHEN 4 THEN IF ( tvoc >= s.min_value, s.item_tips, '正常' ) ELSE 0 END ) tvoc_tip
FROM
aircleaner_data d
JOIN
aircleaner_standard s
GROUP BY
d.id
ORDER BY
create_time DESC