Sql 我可以在子查询中使用别名并运行此别名的平均值吗?

Sql 我可以在子查询中使用别名并运行此别名的平均值吗?,sql,postgresql,Sql,Postgresql,运行此查询时,我不断收到错误。它一直说在表a、b、c或d中找不到总ABC。但这在子查询中。我怎样才能做到这一点 SELECT AVG(total_ABC)/3600 FROM database.office a INNER JOIN database.activation b ON a.gk = b.gk AND installment_description = 'FRIENDS' INNER JOIN database.releases c ON a.release_key = c.rele

运行此查询时,我不断收到错误。它一直说在表a、b、c或d中找不到总ABC。但这在子查询中。我怎样才能做到这一点

SELECT AVG(total_ABC)/3600
FROM database.office a
INNER JOIN database.activation b ON a.gk = b.gk AND installment_description = 'FRIENDS'
INNER JOIN database.releases c ON a.release_key = c.release_key AND DESCRIPTION = 'PHEOBEBUFFAY'
INNER JOIN database.usercode d ON a.user_key = d.user_key AND PLAYED_DATE >= 20200319  
WHERE action_date_key BETWEEN 20200319 AND 20200324 and user_key in
                  (SELECT user_key, SUM(daily_playtime_value) AS total_ABC
                   FROM database.time e
                   WHERE game_key = 1
                   AND date_key > 20200324
                    GROUP BY 1)

您需要将其移动到
FROM
子句:

SELECT AVG(x.total_ABC)/3600
FROM database.office a INNER JOIN
     database.activation b
     ON a.gk = b.gk AND installment_description = 'FRIENDS' INNER JOIN 
     database.releases c
     ON a.release_key = c.release_key AND DESCRIPTION = 'PHEOBEBUFFAY'
INNER JOIN
     database.usercode d
     ON a.user_key = d.user_key AND PLAYED_DATE >= 20200319 JOIN
     (SELECT user_key, SUM(daily_playtime_value) AS total_ABC
      FROM database.time e
      WHERE game_key = 1 AND date_key > 20200324
      GROUP BY 1
     ) x
     USING (user_key)
WHERE action_date_key BETWEEN 20200319 AND 20200324 ; 
还有两项建议:

  • 使用有意义的表别名,通常是表的缩写。这个查询很难理解,因为
    a
    代表“办公室”,而
    b
    代表“激活”。它们应该分别是
    o
    a
  • 限定所有列名,以便清楚列的来源