Sql 我可以在子查询中使用别名并运行此别名的平均值吗?
运行此查询时,我不断收到错误。它一直说在表a、b、c或d中找不到总ABC。但这在子查询中。我怎样才能做到这一点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
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
- 限定所有列名,以便清楚列的来源