[英]Referring to dynamic columns in a postgres query?
假设我有这样的事情:
select sum(points) as total_points
from sometable
where total_points > 25
group by username
我无法在where子句中引用total_points
,因为我收到以下错误: ERROR: column "total_points" does not exist
。 在这种情况下,我在where子句中重写sum(points)
没有问题,但是我想要做一些我上面做的事情。
sum(points)
在where子句中,是Postgres的足够聪明,不重新计算呢? SELECT SUM(points) AS total_points
FROM sometable
GROUP BY
username
HAVING SUM(points) > 25
PostgreSQL
不会计算两次总和。
我相信PostgreSQL就像其他品牌的sql一样,你需要做的事情:
SELECT t.*
FROM (
SELECT SUM(points) AS total_points
FROM sometable
GROUP BY username
) t
WHERE total_points > 25
编辑:忘记别名子查询。
您在声明中有错误:
select sum(points) as total_points
from sometable
where total_points > 25 -- <- error here
group by username
您不能通过total_points
限制行,因为sometable
没有该列。 你想要的是通过total_points
限制结果行,为每个组计算,所以:
select sum(points) as total_points
from sometable
group by username
having sum(points) > 25
如果在示例中替换total_point
,那么只需在所有行计算的总和大于25的情况下进行切换,然后返回按用户名分组的所有行。
编辑:
永远记住订单:
JOIN
的FROM
是获取表格 WHERE
SELECT
GROUP BY
用于将组行分组到相关组中 HAVING
用于限制产生的基团 ORDER BY
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.