round(sum(case when s_score>=60 then 1 else 0 end)/count(c_id),2)passRate,
时间: 2024-02-29 21:56:46 浏览: 19
这是一段 SQL 语句,用于计算某门课程的及格率。其中,s_score 表示学生成绩,c_id 表示课程编号。语句首先使用 case when 条件语句判断学生成绩是否大于等于 60 分,如果满足条件则返回 1,否则返回 0。然后使用 sum 函数计算及格的学生人数,除以 count 函数计算出总人数,最后使用 round 函数保留两位小数,得出及格率。
相关问题
select leve, score_grade, round(count(score_grade) / total, 3) as ratio from ( select level, ( case when score_grade >= 90 then '优' when score_grade >= 75 then '良' when score_grade >= 60 then '中' else '差' end ) as score_grade, count(*) over ( partition by level ) as total from user_info left join exam_record using (uid) where score_grade is not null ) as main group by level, score_grade order by level desc, ratio desc
这是一个 SQL 查询语句,它从 user_info 和 exam_record 两个表中联合查询,计算出每个用户的 score_grade,并按照 level 和 score_grade 进行分组,最后按照 level 和 ratio 进行排序。
具体来说,这个查询语句的执行过程如下:
1. 首先,从 user_info 表中获取 uid 和 level 字段,从 exam_record 表中获取 uid 和 score 字段,并使用 left join 进行联合查询。
2. 接着,在 select 语句中,使用 case when 语句对 score_grade 进行分类,将其转换为优、良、中、差四个等级,并计算每个等级的数量。同时,使用 count(*) over (partition by level) as total 计算每个 level 的总数。
3. 然后,在 from 子句中,将上一步得到的结果作为一个子查询,命名为 main。
4. 最后,在 group by 子句中,按照 level 和 score_grade 进行分组,并使用 round(count(score_grade) / total, 3) as ratio 计算出每个等级的比例。最后,按照 level 和 ratio 进行排序,其中 level 按照降序排列,ratio 按照降序排列。
总的来说,这个查询语句的目的是统计每个 level 中各个 score_grade 的比例,并按照比例进行排序。
重新生成这串sql 解决division by zero的问题 select PROD_DIS_TYPE , case when PROD_DIS_TYPE = '1' then DECODE(sum(FIRST_BIZ), 0,0, ROUND(sum(case when CONTRACT_CODE = 'NHT-1904506' then FIRST_BIZ else 0 end) / sum(FIRST_BIZ), 2))::int else 0 end as FIRST_BIZ , case when PROD_DIS_TYPE = '2' then DECODE(sum(APPR_DESIGN_PROD), 0, 0, ROUND(sum(case when CONTRACT_CODE = 'NHT-1904506' then APPR_DESIGN_PROD else 0 end) / sum(APPR_DESIGN_PROD), 2))::int else 0 end as APPR_DESIGN_PROD from T_SPDI_CONT_SUB_PROJ where UNITERM_CODE = 'N1900620-04-008' and SUB_PROJ_CODE = 'N1900620-04-302' and PROD_DIS_TYPE = '1' group by PROD_DIS_TYPE
可以在除法运算前加上 NULLIF 函数,将分母为 0 的情况转换为 NULL,避免了 division by zero 的错误。修改后的 SQL 如下:
```
SELECT
PROD_DIS_TYPE,
CASE WHEN PROD_DIS_TYPE = '1'
THEN DECODE(SUM(FIRST_BIZ), 0, 0, ROUND(SUM(CASE WHEN CONTRACT_CODE = 'NHT-1904506' THEN FIRST_BIZ ELSE 0 END) / NULLIF(SUM(FIRST_BIZ), 0), 2))::INT
ELSE 0
END AS FIRST_BIZ,
CASE WHEN PROD_DIS_TYPE = '2'
THEN DECODE(SUM(APPR_DESIGN_PROD), 0, 0, ROUND(SUM(CASE WHEN CONTRACT_CODE = 'NHT-1904506' THEN APPR_DESIGN_PROD ELSE 0 END) / NULLIF(SUM(APPR_DESIGN_PROD), 0), 2))::INT
ELSE 0
END AS APPR_DESIGN_PROD
FROM
T_SPDI_CONT_SUB_PROJ
WHERE
UNITERM_CODE = 'N1900620-04-008'
AND SUB_PROJ_CODE = 'N1900620-04-302'
AND PROD_DIS_TYPE = '1'
GROUP BY
PROD_DIS_TYPE
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)