Подзапрос в SELECT - несгруппированный столбец из внешнего запроса - PullRequest
0 голосов
/ 11 июля 2020

Мне нужно рассчитать ARPU (доход / # пользователей), но я получил эту ошибку:

подзапрос использует разгруппированный столбец «usage_records.date» из внешнего запроса СТРОКА 7: WHERE created_at <= date_trun c ('день', записи_использования.d ... ^ </p>

Ожидаемые результаты:

  • Доход (день) = СУММ (количество_в евро) за этот день
  • Количество пользователей (день) = Общее количество зарегистрированных пользователей до этого дня

Postgresql (Запрос)

SELECT 
    date_trunc('day', usage_records.date) AS day,
    SUM(usage_records.quantity_eur) as Revenue,
    ( SELECT 
        COUNT(users.id)
        FROM users 
        WHERE created_at <= date_trunc('day', usage_records.date)
    ) as users_count
    
FROM users 
INNER JOIN ownerships ON (ownerships.user_id = users.id) 
INNER JOIN profiles ON (profiles.id = ownerships.profile_id)
INNER JOIN usage_records ON (usage_records.profile_id = profiles.id)

GROUP BY DAY
ORDER BY DAY asc

1 Ответ

1 голос
/ 11 июля 2020

ваш подзапрос (выполняется для каждой строки) cointain столбец, не упомянутый в группе, но не задействованный в агрегации .. это приводит к ошибке, но вы можете реорганизовать свой запрос, используя условное значение также для этого значения

SELECT 
    date_trunc('day', usage_records.date) AS day,
    SUM(usage_records.quantity_eur) as Revenue,
    sum( case when  created_at <= date_trunc('day', usage_records.date) 
        AND users.id is not null
        then 1 else 0 end ) users_count
    
FROM users 
INNER JOIN ownerships ON (ownerships.user_id = users.id) 
INNER JOIN profiles ON (profiles.id = ownerships.profile_id)
INNER JOIN usage_records ON (usage_records.profile_id = profiles.id)

GROUP BY DAY
ORDER BY DAY asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...