запрос postgresql не возвращает ожидаемый результат - PullRequest
0 голосов
/ 14 ноября 2018

Я сформировал этот запрос postgresql для получения некоторого результата:

Select 
  TblDailyRch.viewing_date1, 
  TblDailyRch.channel_name1, 
  ((TblDailyRch.Reach/tblUniqViewers4AllChannels.ReachAll) * 100) "Reach %"
From
  (Select 
     viewing_date viewing_date1, 
     channel_name channel_name1, 
     count(distinct party_wid) Reach 
   From 
     tv_viewing_sessions_daily_aggregate 
   Where 
     viewing_date between '20171101' and '20171102' 
   Group By 
     viewing_date1, 
     channel_name 
   Order BY 
     viewing_date1, 
     channel_name1) TblDailyRch,
   (Select 
      viewing_date viewing_date2, 
      count(distinct party_wid) ReachAll 
    From 
      tv_viewing_sessions_daily_aggregate 
    Where 
      viewing_date between '20171101' and '20171102' 
    Group By 
      viewing_date2 Order BY viewing_date2) tblUniqViewers4AllChannels 
Where 
  tblUniqViewers4AllChannels.viewing_date2 = TblDailyRch.viewing_date1;

Ниже приведен пример результата при выполнении только первого запроса:

 viewing_date |       channel_name       | reach
--------------+--------------------------+--------
 20171101     | 3E                       |  25133
 20171101     | 4FM                      |    253
 20171101     | 4MUSIC                   |   1243
 20171101     | 98FM                     |    236
 20171101     | ALIBI                    |   3468

Ниже приведен пример результата при выполнении второго запроса:

viewing_date2 | reachall
---------------+----------
 20171101      |   115623
 20171102      |   113898

Но когда я запускаю полный запрос, я получаю следующий результат:

 viewing_date |       channel_name       | Reach %
--------------+--------------------------+----------
 20171101     | 3E                       |        0
 20171101     | 4FM                      |        0
 20171101     | 4MUSIC                   |        0
 20171101     | 98FM                     |        0

Логически запрос кажется правильным, но я не могу понять, почему при выполнении полного запроса третьи столбцы «Reach%» дают результат в виде «0» вместо ожидаемого вычисленного значения в процентах?

1 Ответ

0 голосов
/ 14 ноября 2018

Оба эти COUNT() s возвращают целое число, а целочисленное деление не возвращает десятичных дробей. Если бросить одного из них на поплавок, вы получите подразделение с плавающей запятой, возвращающее то, что вы ожидали.

Например:

count(distinct party_wid)::float Reach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...