在Postgresql中,如何从一列中具有M个不同值的表中获取未知的记录数?

时间:2015-07-03 01:51:02

标签: sql postgresql

假设一个名为tau的表。

select distinct B From tau Where C = 12351 Order By B Desc Limit 2

A列是主键。它将是独一无二的。 B列是外键。在我的数据库中,没有整数键在表之间是相同的。 C列不是关键。

这个表会有很多行。还有许多其他列,例如列C,它们是为搜索索引的。

我想从B列得到M个不同的值。让我们说M = 2

通常,我会去

B
-----
10
5

我得到了

A | B
------
9 - 10
7 - 5
6 - 5

这是现在的现状。但我想升级到一个新场景:

当C列中的值将记录添加到结果堆(其中C = 12351)时,我想要返回列A以及列B ,同时保持最多不同列B值的限制2 。

看哪,我想要的结果。

babel

问题是,返回的记录的实际限制可能大于M,或者示例中为2。我真的不关心有多少记录通过,只要只有M个不同的B值。如何在Postgresql中编写查询来完成此操作?

1 个答案:

答案 0 :(得分:2)

你可以通过这样的方式接近你想要的东西:

select A, B
from tau t
where (B, C) in (select distinct B, C
                 From tau
                 Where C = 12351
                 Order By B Desc
                 Limit 2
                );

这总是返回A列,但看起来似乎是你想要的。