我如何定义一个查询,然后运行该查询并SELECT COUNT(*)
在该查询的结果上运行(返回记录数)?
我想要类似于以下的结果:
postgres@127:postgres> (SELECT 1) union all (select 2) union all (select 3);
+----------+
| ?column? |
|----------|
| 1 |
| 2 |
| 3 |
+----------+
SELECT 3
Time: 0.049s
postgres@127:postgres> select count(*) from ((SELECT 1) union all (select 2) union
all (select 3)) as q;
+-------+
| count |
|-------|
| 3 |
+-------+
SELECT 1
它必须是一个 sql 语句,因为我正在通过不支持终端变量的 pgcli 运行它(https://github.com/dbcli/pgcli/issues/829)。
我正在尝试使用匿名 PLPGSQL 函数,但很难弄清楚......接下来我可以研究很多事情(匿名代码块,使用非匿名函数但随后删除它,从函数返回结果(一个查询而不是一个集合或行?))但我不知道要关注什么。到目前为止我有这个:
DO $$DECLARE v record;
BEGIN
SELECT 10,20,30 into v;
END$$;
SELECT COUNT(*) FROM v;
对于给定的例子
您不需要 PL/pgSQL、临时表或 CTE 来完成任务。在您的示例中将
查询与 like 组合在一起时:
UNION ALL
这是一个便宜得多的等价物:
因为
count(*)
永远不会返回 NULL,所以这也是 NULL 安全的。如果您
SELECT
根本无法更改给定的查询,则可以将它们封装在子查询中:仍然比在计算之前构建整个结果集便宜得多。(只是为了事后把它全部扔掉。)
执行查询并获取结果计数
GET DIAGNOSTICS
在 PL/pgSQL 中使用。例子:称呼:
看: