作为新疆和田的大数据技术专业学生,虽然暂时没找到对口工作,但一直没停下专业积累——不管是电商数据处理,还是家乡的农业大数据应用,都发现HQL的CASE WHEN语句是高频实用工具。它就像“数据分类转换器”,能轻松搞定跨行业的分类、转码、统计需求。今天整理电商+农业双场景的实战案例,和深耕技术的小伙伴一起学习探讨~感谢阅读咱继续往前

一、电商场景(核心需求+极简实现)

 

1. 订单状态转义

 

需求:编码0-4转文字描述(适配报表展示)

 

sql

SELECT 

  order_id, user_id,

  CASE order_status

    WHEN 0 THEN '待付款' WHEN 1 THEN '已付款' WHEN 2 THEN '已发货'

    WHEN 3 THEN '已完成' WHEN 4 THEN '已取消' ELSE '未知状态'

  END AS order_status_desc,

  pay_amount, shop_id

FROM dw.order_info;

 

 

2. 用户消费分级

 

需求:按30天消费额划分用户等级(支撑精准营销)

 

sql

SELECT 

  user_id, user_name, total_pay,

  CASE

    WHEN total_pay >=2000 THEN '高价值用户'

    WHEN total_pay >=1000 THEN '活跃用户'

    WHEN total_pay >=300 THEN '潜力用户'

    ELSE '新用户'

  END AS user_level

FROM dw.user_consume;

 

 

3. 店铺订单统计

 

需求:按店铺统计各状态订单数(运营决策用)

 

sql

SELECT 

  shop_id,

  SUM(CASE WHEN order_status=0 THEN 1 ELSE 0 END) AS pending_pay_cnt,

  SUM(CASE WHEN order_status=1 THEN 1 ELSE 0 END) AS paid_cnt,

  SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END) AS shipped_cnt,

  COUNT(*) AS total_order_cnt

FROM dw.order_info GROUP BY shop_id;

 

 

4. 区域化筛选

 

需求:新疆高价值用户已完成订单+非新疆活跃用户已付款订单

 

sql

SELECT order_id, user_id, user_level, province

FROM dw.order_info

LEFT JOIN dw.user_consume ON order_info.user_id=user_consume.user_id

LEFT JOIN dw.user_addr ON order_info.user_id=user_addr.user_id

WHERE 

  CASE

    WHEN province='新疆' THEN user_level='高价值用户' AND order_status=3

    ELSE user_level='活跃用户' AND order_status=1

  END;

 

 

二、农业大数据(新疆和田特色场景)

 area_id area_name climate_type avg_yield

5001 和田县 暖温带干旱 3200kg/亩

5002 墨玉县 暖温带半干旱 2900kg/亩

5003 皮山县 温带干旱 2500kg/亩

5004 洛浦县 暖温带干旱 3500kg/亩

 

1. 作物成熟度转义

 

需求:编码0-3转文字(适配农业监测报表)

 

sql

SELECT 

  crop_id, crop_name,

  CASE maturity_code

    WHEN 0 THEN '未成熟' WHEN 1 THEN '半成熟' WHEN 2 THEN '成熟'

    WHEN 3 THEN '完全成熟' ELSE '未知'

  END AS maturity_desc,

  area_id, yield_pred

FROM dw.crop_monitor;

 

 

2. 种植产区分级

 

需求:按平均产量划分产区等级(种植规划用)

 

sql

SELECT 

  area_id, area_name, avg_yield,

  CASE

    WHEN avg_yield >=3200 THEN '优质产区'

    WHEN avg_yield >=2800 THEN '适宜产区'

    ELSE '潜力产区'

  END AS area_level

FROM dw.plant_area;

 

 

3. 作物产量统计

 

需求:按区域统计红枣、核桃、葡萄预计产量

 

sql

SELECT 

  area_id, area_name,

  SUM(CASE WHEN crop_name='和田红枣' THEN yield_pred ELSE 0 END) AS jujube_yield,

  SUM(CASE WHEN crop_name='薄皮核桃' THEN yield_pred ELSE 0 END) AS walnut_yield,

  SUM(yield_pred) AS total_yield

FROM dw.crop_monitor

LEFT JOIN dw.plant_area ON crop_monitor.area_id=plant_area.area_id

GROUP BY area_id, area_name;

 

 

4. 优质作物筛选排序

 

需求:筛选优质产区完全成熟作物,按产量降序

 

sql

SELECT area_name, crop_name, yield_pred

FROM dw.crop_monitor JOIN dw.plant_area ON crop_monitor.area_id=plant_area.area_id

WHERE area_level='优质产区' AND maturity_code=3

ORDER BY yield_pred DESC;

 

 

三、核心注意点

 

1. 条件按“从大到小”写,避免逻辑重叠

2. 编码超10个用维表JOIN,别硬写CASE WHEN

3. 必加ELSE,防止NULL值影响统计结果

(不是因为有希望才坚持,而是坚持了才有希望。)

更多推荐