0

我正在寻找优雅的方式来编写这个查询的 PostgreSQL 版本:

SELECT count(distinct a,b) / count(distinct c,d)
FROM t1
GROUP BY e;

它可以通过 CONCAT 函数来完成,但在这种情况下我会得到巨大的性能下降。

每个不同的计数都可以这样写:

SELECT count(*), e FROM
(SELECT a, b, e FROM t1 GROUP BY a, b, e) as tmp
GROUP BY e;

SELECT count(*), e FROM
(SELECT c, d, e FROM t1 GROUP BY c, d, e) as tmp
GROUP BY e;

但我找不到如何将它们组合成一个查询以获得最终结果

这是创建表来测试语法:

CREATE TABLE t1 (
a int,
b int,
c int, 
d int, 
e int 
);
4

1 回答 1

1

不确定优雅,但看起来可以通过这种方式完成:

SELECT e, c1/c2 FROM

(SELECT count(*) as c1, e FROM
(SELECT a, b, e FROM t1 GROUP BY a, b, e) as sub1
GROUP BY e) as tmp1

INNER JOIN 

(SELECT count(*) as c2, e FROM
(SELECT c, d, e FROM t1 GROUP BY c, d, e) as sub2
GROUP BY e) as tmp2

USING (e)
于 2016-04-24T05:56:34.883 回答