+ -
当前位置:首页 → 问答吧 → 一张表,如何求成功率?

一张表,如何求成功率?

时间:2011-12-24

来源:互联网



ID NAME OK  

1 张三 成功


2 李四 成功


3 张三 失败

4 黎明 成功

5 刘备 成功

6 李四 失败

如何查出每个人的成功率是多少? SQL语句。

作者: overset   发布时间: 2011-12-24

SQL code
select  
  name,  
  ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%'
from
  tb
group by
  name

作者: fredrickhu   发布时间: 2011-12-24

引用 1 楼 fredrickhu 的回复:
SQL code
select
name,
ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%'
from
tb
group by
name
如何根据名次排序啊,在AS个字段 名次 :1,2,3····名

作者: overset   发布时间: 2011-12-24

作者: overset   发布时间: 2011-12-24

SQL code
select  
  name,
  成功率,
  row_number()over(order by 成功率 desc) as AS
from
( 
select  
  name,  
  ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%' as 成功率
from
  tb
group by
  name
)t

作者: fredrickhu   发布时间: 2011-12-24

SQL code
select  
  name,
  成功率,
  row_number()over(order by 成功率 desc) as [AS]
from
( 
select  
  name,  
  ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%' as 成功率
from
  tb
group by
  name
)t

作者: fredrickhu   发布时间: 2011-12-24

SQL code
SELECT  [NAME] ,
        SUM(CASE WHEN [OK] = N'成功' THEN 1
                 ELSE 0
            END) * 1.0 / COUNT(*) ,
        DENSE_RANK() OVER ( ORDER BY SUM(CASE WHEN [OK] = N'成功' THEN 1
                                              ELSE 0
                                         END) * 1.0 / COUNT(*) DESC ) 名次1 ,
        RANK() OVER ( ORDER BY SUM(CASE WHEN [OK] = N'成功' THEN 1
                                        ELSE 0
                                   END) * 1.0 / COUNT(*) DESC ) 名次2
FROM    TB
GROUP BY [NAME]

作者: wufeng4552   发布时间: 2011-12-24