2017-02-13 4 views
2

У меня этот синтаксис sql, который отлично работает. Он показывает количество источников, используемых для доступа к нам. Я хочу, чтобы число отображалось в процентах (из 100%), а не в процентах. Как я могу получить свое заявление, чтобы показать счет в процентах, просьба предоставить справочные базы данных.Показывать проценты за неделю и год

заявление:

select coalesce(t2.Source, 'Total') as "Source", 
     coalesce(count(case when Week = date_trunc('week', now())::date - 1 
           then t1."Source" end),0) "This Week", 
     coalesce(count(t1.Source),0) "YTD" 
from infosys t2 
    left join infocentertracker t1 
       ON t1.Source = t2.Source 
       and Week >= DATE '01/01/2017' 
       and Week < DATE '01/01/2018' 
       and Project_ID = 'PCR' 
group by rollup(t2.Source) 

Результат:

Source   This Week YTD      This Week  YTD 
Billboard   0   0       0%   0% 
Builder   2   8       20%   12% 
Community Website 0   2       0%   3% 
Drive-by   6   35      60%   52% 
Non-Disclosed  0   1  Requested -->  0%   2% 
Other Website  0   4       0%   6% 
Radio    0   0       0%   0% 
Realtor   1   13      10%   19% 
Resident Referral 1   3       10%   4% 
Return Visitor  0   0       0%   0% 
RPG Website  0   0       0%   0% 
Social Media  0   2       0%   3% 
Total    10   68      100%  100% 
+0

Почему вы используете 'roll roll'? – McNets

+0

Чтобы показать Total в нижней части запроса. –

+0

Возможно, нужна функция окна: http://stackoverflow.com/a/6207658/3430807 – Andreas

ответ

2

Я не уверен, что это лучший способ, но вы можете использовать существующий запрос в качестве подзапроса, чтобы получить требуемый результат в процентах, используя функцию окна MAX.

SELECT Source, 
ROUND(100.0*"This Week"/ MAX(CASE WHEN Source='Total' THEN "This Week" END) OVER(),0)||'%' AS "This Week", 
ROUND(100.0*YTD/ MAX(CASE WHEN Source='Total' THEN YTD END) OVER(),0)||'%' AS YTD 
FROM 
(SELECT COALESCE(T2.Source, 'Total') AS "Source", 
      COALESCE(COUNT(CASE 
          WHEN WEEK = DATE_TRUNC('week', NOW())::date - 1 THEN T1."Source" 
         END),0) "This Week", 
      COALESCE(COUNT(T1.Source),0) "YTD" 
    FROM INFOSYS T2 
    LEFT JOIN INFOCENTERTRACKER T1 ON T1.Source = T2.Source 
    AND WEEK >= DATE '01/01/2017' 
    AND WEEK < DATE '01/01/2018' 
    AND PROJECT_ID = 'PCR' 
    GROUP BY ROLLUP(T2.Source) 
) X 
+0

Спасибо vkp, первый выбор Я попробовал 't1.Source', и он выкинул ошибку,' ERROR: missing FROM-clause запись для таблицы «t1» '. Любая идея о том, как я могу это решить. –

+0

@ Pythoner .. можете попробовать отредактированную версию? –

+0

Я отредактировал его снова .. Предположим, что 'source' чувствителен к регистру. Пожалуйста, внесите изменения в внутренний запрос с точным случаем этого столбца в любой из таблиц. Я использовал «Source». –

Смежные вопросы