在对人们进行新冠病毒测试期间,他们获得了测试的corad分数: -1:负数 2-5:轻度 :6-10:严重 您将获得一个表格,其中的列如下: 姓名、ID、年龄、corad_score
您需要打印给定的输出
年龄计数 阴性 计数 轻度 计数 严重
18-30日
31-45
46-60
cte 为( 选择*,大小写 当 corad_score=-1 时则为“负” 当 corad_score>=2 或 corad_scores<=5 then 'mild' else 'serious' end as corad_score; ) I cannot do ahead of this as i am not able to club the ages
您在寻找这样的东西吗?
WITH cte AS (
SELECT *,
CASE
WHEN corad_score = -1 THEN 'negative'
WHEN corad_score >= 2 AND corad_score <= 5 THEN 'mild'
WHEN corad_score >= 6 AND corad_score <= 10 THEN 'serious'
ELSE 'unknown'
END AS corad_category
FROM your_table_name
)
SELECT
CONCAT(AGE_GROUP_MIN, '-', AGE_GROUP_MAX) AS age_group,
SUM(CASE WHEN age >= 18 AND age <= 30 THEN 1 ELSE 0 END) AS age_18_30,
SUM(CASE WHEN age >= 31 AND age <= 45 THEN 1 ELSE 0 END) AS age_31_45,
SUM(CASE WHEN age >= 46 AND age <= 60 THEN 1 ELSE 0 END) AS age_46_60,
SUM(CASE WHEN corad_category = 'negative' THEN 1 ELSE 0 END) AS negative_count,
SUM(CASE WHEN corad_category = 'mild' THEN 1 ELSE 0 END) AS mild_count,
SUM(CASE WHEN corad_category = 'serious' THEN 1 ELSE 0 END) AS serious_count
FROM (
SELECT *,
CASE
WHEN age >= 18 AND age <= 30 THEN 18
WHEN age >= 31 AND age <= 45 THEN 31
WHEN age >= 46 AND age <= 60 THEN 46
ELSE 0
END AS AGE_GROUP_MIN,
CASE
WHEN age >= 18 AND age <= 30 THEN 30
WHEN age >= 31 AND age <= 45 THEN 45
WHEN age >= 46 AND age <= 60 THEN 60
ELSE 0
END AS AGE_GROUP_MAX
FROM cte
) AS age_grouped_data
GROUP BY age_group
ORDER BY age_group;