我有一个查询由两个 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
而不是 UNION
。 UNION
将删除两个选择部分之间的重复行。如果您知道不能有任何重复项(或者您确实想返回它们)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/