Sql 如何选择前N个完整分区?

Sql 如何选择前N个完整分区?,sql,postgresql,Sql,Postgresql,注意。我自己找到了一个解决方案,但我想分享我的解决方案,因为搜索结果非常糟糕。这个问题已经被问过了,并且在那里得到了回答,直到写下这个答案我才找到它 给定下面的数据集,如何选择前N个完整分区 福巴 ---|--- 1 | a 1 | b 2 | c 2 | d 2 | e 3 | f 我不知道如何更好地描述这一点,但我想按foo对数据进行分区,只得到前N个分区。也许一个例子可以更好地说明这一点: N=1 福巴 ---|--- 1 | a 1 | b N=2 福巴 ---|--- 1 | a 1

注意。我自己找到了一个解决方案,但我想分享我的解决方案,因为搜索结果非常糟糕。这个问题已经被问过了,并且在那里得到了回答,直到写下这个答案我才找到它

给定下面的数据集,如何选择前N个完整分区

福巴 ---|--- 1 | a 1 | b 2 | c 2 | d 2 | e 3 | f 我不知道如何更好地描述这一点,但我想按foo对数据进行分区,只得到前N个分区。也许一个例子可以更好地说明这一点:

N=1 福巴 ---|--- 1 | a 1 | b N=2 福巴 ---|--- 1 | a 1 | b 2 | c 2 | d 2 | e N=3 福巴 ---|--- 1 | a 1 | b 2 | c 2 | d 2 | e 3 | f 我使用PostgreSQL,但这是一个更具概念性的问题,适用于任何SQL实现。所有的实现都有一些选择TOP或LIMIT的功能,但是,它通常非常有限,有些实现甚至要求它是一个常量值

以下查询在PostgreSQL中工作,但不是很好:

挑选* 以身作则 福订购 限度 选择SUMcount 从…起 选择COUNT*作为COUNT 以身作则 按foo分组 福订购 限制2 作为一个 ;
我看得不对。解决方案是首先选择N个不同的 foo和的值将表与其自身连接起来

选择b.foo,b.bar 从中,从示例ORDER BY foo LIMIT 2中选择不同的foo作为 在a.foo=b.foo上连接示例b; 从本质上讲,问题的解决方法是将所有的值都扔掉,除了被分割的值,然后应用限制,最后使用联接再次添加所需的值

使用+:

以cte为例 选择 *, foo作为秩的顺序上的稠密秩 从…起 实例 选择cte.foo、cte.bar 来自cte cte排名在哪里