sql - postgreSQL 如何获取 UNION 查询的每个 SELECT 返回的元组数?

标签 sql postgresql

我有一个查询由两个 SELECT 查询组成。每个 SELECT 查询都会返回一个 info。我对获取每个 SELECT 查询返回的元组数很感兴趣。

我想做这样的事情:

SELECT table1.info AS info, num_result_tuple()
FROM table1, table2
WHERE table1.info < table2.info
UNION
SELECT table3.info AS info, num_result_tuple()
FROM table3, table4
WHERE table3.info < table4.info

其中 num_result_tuple() 必须表示每个简单查询找到的元组数。

postgresql 有这样的函数吗?还是有另一种方法来实现这一目标?

最佳答案

您可以为此使用窗口函数:

SELECT table1.info AS info, count(*) over () as part_count
FROM table1, table2
WHERE table1.info < table2.info
UNION
SELECT table3.info AS info, count(*) over () 
FROM table3, table4
WHERE table3.info < table4.info;

您可能需要 UNION ALL 而不是 UNIONUNION 将删除两个选择部分之间的重复行。如果您知道不能有任何重复项(或者您确实想返回它们)UNION ALL 会更快。

如果您需要从原始查询中删除重复项,添加 count() 将更改结果。想象一下以下部分结果:

第一个查询:

info | part_count
-----+-----------
   a | 1 

第二个查询:

info | part_count
-----+-----------
   a | 2 
   b | 2

工会会回来

info | part_count
-----+-----------
   a | 1
   a | 2 
   b | 2

没有计数的查询会返回

info 
----
   a 
   b 

关于sql - postgreSQL 如何获取 UNION 查询的每个 SELECT 返回的元组数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26276459/

相关文章:

python - 如何在 PostgreSQL 中将整数解压缩为 float ?

postgresql - 使用别名简化 PostgreSQL 全文搜索 tsvector 和 tsquery

sql - 从整数转换后如何按名称排序月份?

sql - 如何计算层次结构所有级别的总和

具有多个 X 轴列的 SQL Server PIVOT

sql - Postgres一对多

sql - 如何在 PostgreSQL 中转置二维数组

bash - 是否可以从 psql 内部导入 OSM 数据?

mysql - 无法使用 select * 获取所有列

sql - 使用 INNER JOIN 从 SQL 转换 UPDATE 以便在 MySQL 中使用