显示表格中值的百分比 - 即使是缺失值

时间:2018-05-22 00:47:37

标签: sql sql-server tsql percentage

我有一个名为测试的下表:

Id                                   | Value
---------------------------------------------
019D9E52-41D1-45DF-81B6-C7CC484115A7 |   1
262640CA-65C2-4E30-8654-E187ACA1EEF4 |   1
53710AFC-4E19-4B1C-B68B-CDB713EC3D62 |   2
8FF7E77C-D04C-4961-82D9-87C2E5A1A096 |   2

还有一个名为 TestView 的视图:

Value
------
 1
 2
 3

这些只是伪代码示例。

现在,我想从测试表中选择所有值的百分比,以及 TestView 中的值是否不在测试 table我只想显示0。

这是预期的结果:

Value | Percentage
-------------------
  1   |      50
  2   |      50
  3   |      0

SQL Fiddle

2 个答案:

答案 0 :(得分:2)

我想你想要:

select tv.value, count(t.id) * 1.0 / sum(count(t.id)) over () as ratio
from testview tv left join
     test t
     on tv.value = t.value
group by tv.value
order by tv.value;

注意:这给出了比率而不是百分比,因为我认为0到1之间的数字更有用。当然,您可以乘以100.0而不是1.0来得到0到100之间的范围。

答案 1 :(得分:0)

您可以通过以下方式获得百分比:

SELECT value,
   100.0 * COUNT(*)        -- count per bit
   / SUM(COUNT(*)) OVER () -- sum of those counts = count of all rows
   As "Percentage"
FROM Test
GROUP BY value

如有任何疑问,请看一下:SQL Percentage of Occurrences