case ... when ... then ... else ... end 的使用经历

根据以下两个表:

     * 数据表:

     * 标准划分表:

需求:

     根据‘数据表’中的各项的数据,查询得到相对应的划分标准。在‘标准划分表’中,数据<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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值