根據以下兩個表:
* 資料表:
* 标準劃分表:
需求:
根據‘資料表’中的各項的資料,查詢得到相對應的劃分标準。在‘标準劃分表’中,資料<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