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;
插入第二个 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;
我认为最简单的方法是使用 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;
但是,我建议将该值保留为数字。
我对 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;
插入第二个 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;
我认为最简单的方法是使用 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;
但是,我建议将该值保留为数字。