LINE 5: HAVING num > 100
从这里
https://www.postgresqltutorial.com/postgresql-having/
找到了原因。 Having子句不能使用列的别名,原因在于PG执行sql语句时的解析顺序是这样的,如下图。 可以看到解析having子句时,select语句尚未解析,所以num还未被定义出来。
既然不能使用别名,那就只能再调用聚集函数了
SELECT count(*) AS "num", domain_id
FROM "concept"
where standard_concept='S'
GROUP BY domain_id
HAVING count(*) > 100
ORDER BY num;
HAVING
子句
HAVING
子句
可以让我们筛选分组后的各组数据。
WHERE
子句
在所选列上设置条件,而
HAVING
子句
则在由 GROUP BY
子句
创建的分组上设置条件。
下面是
HAVING
子句
在 SELECT 查询
中
的位置:
SELECT
WHERE
GROUP BY
HAVING
ORDER BY
HAVING
子句
必须放置于 GROUP BY
子句
后面,ORDER BY
子句
前面,下面是
HAVING
子句
在 SELECT 语句
中
基础语法:
SELECT column
我们在写SQL时常常会使用where和
having
子句
来进行数据的过滤。但是这两者具体区别在哪呢?
PostgreSQL
中
和其它关系型
数据库
一样也支持聚合函数,一个聚合函数是指从多个输入行
中
计算出一个结果。
而对于where和
having
子句
最大的区别在于:Where
中
不能
使用聚合函数,而
having
中
可以使用聚合函数。
那么为什么会有这种限制呢?我们来看个例子:
–找出所有记录
中
id最大的记录:...
转一篇关于sql语句书写规则的,给自己备忘,也分享出来,转自此文章当select的表达式很长时,我们经常会用as
子句
为该表达式指定
别名
,然而却发现无法在Where条件
中
直接使用该
别名
作为判断条件. 例如下面的SQL语句: select id, (c1 + c2) as s from t1 where s > 100 运行会报错: “列名 s 无效” 当然,写成 select id, (c1 ...