2015-08-13 2 views
0

У меня есть этот запрос, который работает:PSQL: сумма не работает на полях

SELECT 
partners.name, 
roles.name, 
(SELECT count(*) FROM partner_member_bindings WHERE roles.id = partner_member_bindings.role_id AND verify_status != 'pending') AS Num_verifications, 
CAST(roles.price_partner/100 AS money) AS partner_price 
FROM partners 
JOIN roles ON roles.partner_id = partners.id 
ORDER BY partners.name, roles.name 

То, что я хочу, чтобы отобразить дополнительное поле, показывающее «partner_price * Num_verifications» значение в долларах. Ничего не делаю:

sum (Num_verifications * partner_price) возвращает, что Num_verification не существует. Копирование по всему подзапросу (да, я знаю, но я просто тестирую) тоже не работает.

Как это можно сделать?

ответ

1

Поля в списке могут содержать только входные столбцы, и они становятся столбцами вывода при их запуске. Вот почему вы не можете использовать вычисляемый столбец в другом определении столбца.

Но если вы хотите SUM, это означало бы какую-то агрегацию. Если вам нужна общая сумма умножения полей, которая обычно не выполняется для каждой строки. Или вам нужен только результат умножения? Обычно это делается на уровне презентации.

Если вам нужно только умножение (так как нет GROUP BYSUM будет то, что в любом случае), вы можете поместить весь запрос в подзапрос и вычислить из этого, оставив сортировочный снаружи:

SELECT 
partnername, 
rolename, 
Num_verifications, 
partner_price, 
partner_price*Num_verifications 
FROM 
    (SELECT 
    partners.name as partnername, 
    roles.name as rolename, 
    (SELECT count(*) FROM partner_member_bindings WHERE roles.id = partner_member_bindings.role_id AND verify_status != 'pending') AS Num_verifications, 
    CAST(roles.price_partner/100 AS money) AS partner_price 
    FROM partners 
    JOIN roles ON roles.partner_id = partners.id) temp 
ORDER BY partners.name, roles.name 
+0

спасибо. запуск его на выходе PSQL '13:50:04 Ошибка ядра: ERROR: column" partnername "не существует' – JasonGenX

+0

@ RM1970 Извините, забыл псевдонимы, исправлено сейчас –

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