有年龄和BMI值,根据不同年龄和性别的BMI标准值每个人是否肥胖进行判断,并将判断结果以数字表示添加到是否肥胖的列中
表结构发一下,以及测试数据。
方法一(如果只针某个小范围年龄段的人可以这样,如果年龄全覆盖建议采用方法二)
select
sex,age,bmi,
case
-- 1岁的男生(后面的bmi阈值根据对应的性别与年龄修改)
when sex='9001001' and age=1 and bmi >17.7 then 3
when sex='9001001' and age=1 and bmi >=16.4 then 2
when sex='9001001' and age=1 and bmi <16.4 then 1
-- 1岁的女生
when sex='9001002' and age=1 and bmi >17.7 then 3
when sex='9001002' and age=1 and bmi >=16.4 then 2
when sex='9001002' and age=1 and bmi <16.4 then 1
-- 2岁的男生
when sex='9001001' and age=2 and bmi >17.7 then 3
when sex='9001001' and age=2 and bmi >=16.4 then 2
when sex='9001001' and age=2 and bmi <16.4 then 1
-- 2岁的女生
when sex='9001002' and age=2 and bmi >17.7 then 3
when sex='9001002' and age=2 and bmi >=16.4 then 2
when sex='9001002' and age=2 and bmi <16.4 then 1
-- 依次列举...
-- 17岁的男生
when sex='9001001' and age=17 and bmi >17.7 then 3
when sex='9001001' and age=17 and bmi >=16.4 then 2
when sex='9001001' and age=17 and bmi <16.4 then 1
-- 17岁的女生
when sex='9001002' and age=17 and bmi >17.7 then 3
when sex='9001002' and age=17 and bmi >=16.4 then 2
when sex='9001002' and age=17 and bmi <16.4 then 1
-- 18岁以上的男生
when sex='9001001' and age>=18 and bmi >17.7 then 3
when sex='9001001' and age>=18 and bmi >=16.4 then 2
when sex='9001001' and age>=18 and bmi <16.4 then 1
-- 18岁以上的女生
when sex='9001002' and age>=18 and bmi >17.7 then 3
when sex='9001002' and age>=18 and bmi >=16.4 then 2
when sex='9001002' and age>=18 and bmi <16.4 then 1
end as is_fat
from table
;
方法二:创建一个bmi的码表,存放每个年龄+性别+阈值1(v1)+阈值2(v2)
select t1.sex,t1.age,t1.bmi,
case
when t1.bmi > t2.v3 then 3
when t1.bmi >= t2.v2 then 2
when t1.bmi < t2.v2 then 1
end as is_fat
from t1
join t2 on t1.sex = t2.sex and t1.age=t2.age
年龄和性别分类不久四种嘛 case when 结果存 then 里