【问题标题】:Sub query in SELECT - ungrouped column from outer querySELECT 中的子查询 - 来自外部查询的未分组列
【发布时间】:2020-11-01 00:13:26
【问题描述】:

我必须计算 ARPU(收入 / # 个用户),但出现此错误:

子查询使用来自外部查询的未分组列“usage_records.date” 第 7 行:在哪里 created_at

预期结果:

  • Revenue(day) = SUM(quantity_eur) 当天
  • 用户数(天)= 当天之前注册的用户总数

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您的子查询(对每一行执行)包含一个未在 group by 中提及但未参与聚合的列。 这会产生错误 但您也可以使用条件语句重构查询

    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
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多