数据工程师角色的 Sql-Amazon 问题

问题描述 投票:0回答:1

在对人们进行新冠病毒测试期间,他们获得了测试的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

sql-server
1个回答
0
投票

您在寻找这样的东西吗?

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;
© www.soinside.com 2019 - 2024. All rights reserved.