2014-02-04 2 views
0

Я бегала запрос нижеумножая вместе с агрегирование в SQL

SELECT 
    a.num_week, 
    CAST(COUNT(distinct a.account_id)*b.fraud_rate as BIGINT) as unpaid_other 
FROM ads_weekly_total_unpaid_other a 
JOIN ads_weekly_unpaid_other_fraud_rate b 
ON a.num_week = b.num_week 
GROUP BY a.num_week 

я получил ошибку ниже выражения не в GROUP BY ключа «fraud_rate». Я хочу умножить общий счет в неделю на fraud_rate, но почему он не работает?

ответ

0
SELECT z.num_week,CAST(countId * y.fraud_rate) as unpaid_other 
FROM (

     SELECT a.num_week,COUNT(distinct a.account_id) as countId 
     FROM ads_weekly_total_unpaid_other a 
     JOIN ads_weekly_unpaid_other_fraud_rate b 
     ON a.num_week = b.num_week 
     GROUP BY a.num_week 
    )z 

JOIN ads_weekly_unpaid_other_fraud_rate y 
ON y.num_week=z.num_week 
+0

Итак, мы не можем сделать это внутри? – vkaul11

+0

насколько я знаю, это невозможно. –

0

В запросе, вы не группируя только на a.num_week, вы используете функцию совокупного COUNT(Distinct на a.account_id, но у вас нет какой-либо агрегатной функции на b.fraud_rate, ни он находится в группе с помощью ключа, следовательно, ошибка , Поскольку fraud_rate является постоянным через account_id для одного экземпляра num_week, вы можете использовать любую агрегированную функцию, такую ​​как min, max, avg по адресу b.fraud_rate и он даст вам тот же результат.

SELECT a.num_week, 
CAST((COUNT(distinct a.account_id)* MAX(b.fraud_rate)) as BIGINT) as unpaid_other 
FROM ads_weekly_total_unpaid_other a 
JOIN ads_weekly_unpaid_other_fraud_rate b 
ON a.num_week = b.num_week 
GROUP BY a.num_week; 

Я не получил изменений для выполнения запроса здесь. Но я предполагаю, что это должно сработать.

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