Отображение процента значений в таблице - даже пропущенных значений - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующая таблица с именем Test :

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

ЭтиЭто просто примеры псевдокода.

Теперь я хочу выбрать процент от всех значений из таблицы Test , и если значение из TestView отсутствует в Тест таблица Я просто хочу отобразить 0.

Вот ожидаемый результат:

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

SQL Fiddle

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я думаю, что вы хотите:

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.

0 голосов
/ 22 мая 2018

Вы можете получить процент с помощью чего-то подобного:

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-случаев

...