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

Display percentage of values in the table - even of missing values

我有一个名为 Test 的关注 table:

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

这些只是伪代码示例。

现在,我想要 select 来自 Test table 的所有值的百分比,如果来自 TestView 的值不在测试中table我只想显示0.

这是预期的结果:

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

SQL Fiddle

你可以用这样的方式达到百分比:

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

如有疑问,请看这个:

我想你想要:

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 的范围。