一张表,如何求成功率?

沉默又寡言 2011-12-24 03:40:36


ID NAME OK

1 张三 成功


2 李四 成功


3 张三 失败

4 黎明 成功

5 刘备 成功

6 李四 失败

如何查出每个人的成功率是多少? SQL语句。
...全文
176 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-12-25
  • 打赏
  • 举报
回复
create table tb(id int,name nvarchar(20),ok nvarchar(4))
go
insert tb
select 1,'张三','成功' union all
select 2,'李四','成功' union all
select 3,'张三','失败' union all
select 4,'黎明','成功' union all
select 5,'刘备','失败'
go
select name as 姓名,LTRIM(s)+'%' as 成功率,RANK()over(order by s desc)排名 from(
select name,SUM(case when ok='成功' then 100 else 0 end)/COUNT(*)s from tb group by name
)t
/*
姓名 成功率 排名
-------------------- ------------- --------------------
黎明 100% 1
李四 100% 1
张三 50% 3
刘备 0% 4

(4 行受影响)

*/
go
drop table tb
  • 打赏
  • 举报
回复
/*
表tbl
ID NAME OK
1 张三 成功
2 李四 成功
3 张三 失败
4 黎明 成功
5 刘备 成功
6 李四 失败
如何查出每个人的成功率是多少? SQL语句。
*/

go
if OBJECT_ID('tbl') is not null
drop table tbl
go
create table tbl(
id varchar(2),
name varchar(20),
ok varchar(4) check (ok in('成功','失败'))
)
go
insert tbl
select '1','张三','成功' union all
select '2','李四','成功' union all
select '3','张三','失败' union all
select '4','黎明','成功' union all
select '5','刘备','失败'

-------------------------------------------------------
select
name as 姓名,
left(成功率,charindex('.',CAST(成功率 as varchar))+2)+'%',
row_number()over(order by 成功率 desc) as 排名
from
(
select
name,
ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%' as 成功率
from
tbl
group by
name
)t
  • 打赏
  • 举报
回复
/*
我有表A,里面字段有id,sample_no,sample_name;如下:
id sample_no sample_name
1 ZW421100001 黄鹤楼(珍品)
2 ZW421100002 黄鹤楼(红)
3 ZW421100003 黄鹤楼
4 ZW421100004 红金龙(红)
5 ZW421100005 中华
6 ZW421100006 红金龙
希望查询出来结果为 某一品牌系列 出现次数从多到少排序
sample_name 次数
黄鹤楼 3
红金龙 2
中华 1
*/
------------------------------------------------------------------------
go
if OBJECT_ID('A')is not null
drop table A
go
create table A(
id varchar(2),
sample_no varchar(20),
sample_name varchar(20)
)
go
insert A
select '1','ZW421100001','黄鹤楼(珍品)' union all
select '2','ZW421100002','黄鹤楼(红)' union all
select '3','ZW421100003','黄鹤楼' union all
select '4','ZW421100004','红金龙(红)' union all
select '5','ZW421100005','中华' union all
select '6','ZW421100006','红金龙'

---------------------------------------------------------------------------
select (case when charindex('(',sample_name)>0 --返回字符'('出现的开始位置。
then left(sample_name,charindex('(',sample_name)-1)
else sample_name end) as 品牌名,
count(1) 次数 from A
group by
case when charindex('(',sample_name)>0
then left(sample_name,charindex('(',sample_name)-1)
else sample_name end
order by count(1) desc
---------------------------------------------------------------------------
/*
结果表
品牌名 次数
黄鹤楼 3
红金龙 2
中华 1
*/
----------------------------------------------------------------
/*
表tbl
ID NAME OK
1 张三 成功
2 李四 成功
3 张三 失败
4 黎明 成功
5 刘备 成功
6 李四 失败
如何查出每个人的成功率是多少? SQL语句。
*/

go
if OBJECT_ID('tbl') is not null
drop table tbl
go
create table tbl(
id varchar(2),
name varchar(20),
ok varchar(4) check (ok in('成功','失败'))
)
go
insert tbl
select '1','张三','成功' union all
select '2','李四','成功' union all
select '3','张三','失败' union all
select '4','黎明','成功' union all
select '5','刘备','失败'

-------------------------------------------------------
select
name as 姓名,
left(成功率,charindex('.',CAST(成功率 as varchar))+2)+'%',
row_number()over(order by 成功率 desc) as 排名
from
(
select
name,
ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%' as 成功率
from
tbl
group by
name
)t

水族杰纶 2011-12-24
  • 打赏
  • 举报
回复
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]
--小F-- 2011-12-24
  • 打赏
  • 举报
回复
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
--小F-- 2011-12-24
  • 打赏
  • 举报
回复
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
沉默又寡言 2011-12-24
  • 打赏
  • 举报
回复
沉默又寡言 2011-12-24
  • 打赏
  • 举报
回复
[Quote=引用 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
[/Quote]如何根据名次排序啊,在AS个字段 名次 :1,2,3····名
--小F-- 2011-12-24
  • 打赏
  • 举报
回复
select  
name,
ltrim(sum(case ok when '成功' then 1 else 0 end)*100.0/count(1))+'%'
from
tb
group by
name

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧