SQL 服务器完成百分比类别

SQL Server Completion Percentage Category

我对 sql 服务器有点陌生,所以希望这不是太复杂的东西。如果我有一个 table 有一堆数据显示不同的记录是否完​​整...

TABLE 1

ID    CATEGORY    COMPLETE
1     reports     yes
2     reports     no
3     processes   no
4     processes   yes
5     reports     no
6     events      yes

...创建新字段以显示每个类别的完成百分比的最佳方法是什么?

TABLE 2

ID    CATEGORY    PERCENTAGE
1     events      100%
2     processes   50%
3     reports     33%

任何帮助将不胜感激,谢谢。

group by 类别列并使用条件求和仅获得分子中的 complete = 'yes' 个案例。

select category,
100 * 1.0 * sum(case when complete = 'yes' then 1 else 0 end)/count(*) as pct
from tablename 
group by category

您可以使用窗口函数和PARTITION BY Category:

SELECT DISTINCT Category,
[percentage] = ROUND(100 * SUM(CASE complete WHEN 'yes' THEN 1.0 ELSE 0.0 END) 
                           OVER (PARTITION BY Category)/
                           COUNT(*) OVER (PARTITION BY Category),0)
FROM #tab;

LiveDemo

插入第二个 table:

SELECT DISTINCT 
  [id] = IDENTITY(INT, 1,1)
 ,category
 ,[percentage] = ROUND(100 * SUM(CASE complete WHEN 'yes' THEN 1.0 ELSE 0.0 END) 
                             OVER (PARTITION BY CATEGORY)/
                             COUNT(*) OVER (PARTITION BY Category),0)
INTO #table2
FROM #tab
ORDER BY [percentage] DESC;

SELECT *
FROM #table2;

LiveDemo2

我认为最简单的方法是使用 avg():

select category,
       avg(case when complete = 'yes' then 100.0 else 0 end) as pct
from tablename 
group by category;

如果你想把它作为一个带有百分比的数字,你需要更多的字符串操作:

select category,
       str(avg(case when complete = 'yes' then 100.0 else 0 end)) + '%' as pct
from tablename 
group by category;

但是,我建议将该值保留为数字。