Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何显示通过和失败学生的百分比?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL:如何显示通过和失败学生的百分比?

SQL:如何显示通过和失败学生的百分比?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表格,里面有学生的数据和他们的成绩 ID Name Result 1 St1 FAIL 2 St2 PASS 3 St3 PASS 4 St4 PASS 5 St5 FAIL 6 St6 PASS 我希望通过和不通过考试的学生的总百分比四舍五入到小数点后2位。我如何才能做到这一点?SQL: SELECT ROUND( SUM( CONVERT( FLOA

我有一个表格,里面有学生的数据和他们的成绩

ID  Name  Result
1   St1   FAIL
2   St2   PASS
3   St3   PASS
4   St4   PASS
5   St5   FAIL
6   St6   PASS
我希望通过和不通过考试的学生的总百分比四舍五入到小数点后2位。我如何才能做到这一点?

SQL:

SELECT 
    ROUND(
        SUM(
            CONVERT(
                FLOAT,
                CASE WHEN Result = 'PASS' THEN 1 
                     ELSE 0 
                     END
            )
        )
        /COUNT(*) * 100,
        2
    ) AS 'Percent Pass',
    ROUND(
        SUM(
            CONVERT(
                FLOAT,
                CASE WHEN Result = 'FAIL' THEN 1 
                     ELSE 0 
                     END
            )
        )
        /COUNT(*) * 100,
        2
    ) AS 'Percent Fail' 
FROM StudentsResults
结果:

Pass    Fail
66.67   33.33

只是另一个没有计数的选项

范例

返回


用GROUPBY子句怎么样

select round(cast(count(Name) as decimal)/cast((select count(*) from StudentPassFail) as decimal)*100,2), result from StudentPassFail 
group by result;

我没有得到想要的输出。我得到的两个值都是0。请显示您执行的sql。选择roundcountName/从StudentPassFail*100中选择count*,2,结果从StudentPassFail按结果分组;Sry,忘记了十进制的类型转换。答案中已更正
Pass    Fail
66.67   33.33
select round(cast(count(Name) as decimal)/cast((select count(*) from StudentPassFail) as decimal)*100,2), result from StudentPassFail 
group by result;