postgresql语句概率

时间:2016-01-29 00:57:09

标签: sql postgresql

我有两张表A和B如下。

A:
key type
0    t
1    f
2    t
3    f
4    t
5    t
.......
B:
key   name
0     Mary
0     Tony
0     Krolik
1     Tom
2     Tony
3     Tony
3     Mary
3     Tom
4     Tony
4     Tim
5     Tim
5     Mary
5     Wuli
.....

我希望找到它的首字母名称是' f'。

例如,在A中,键1和键3的类型是' f',我们在表B中找到键1和3,有2' Tom'和1'玛丽'还有1' Tony'

    1     Tom
    3     Tony
    3     Mary
    3     Tom

如果n = 1并且表格像以前一样显示,我们希望得到汤姆'因为它的出现是前1。 如何编写sql语句来满足这些要求? 我写下面的东西,但这是错的。谁能帮我?我假设n = 20。

SELECT DISTINCT TOP 20 name 
FROM B
WHERE key IN    (
SELECT key
FROM A
WHERE "type" = 'f'
) 
GROUP BY name
ORDER BY DESC;

1 个答案:

答案 0 :(得分:0)

您似乎不需要汇总。 Postgres中的top相当于limitfetch first <row> rows

SELECT name, key
FROM B
WHERE B.key IN (SELECT A.key
                FROM A
                WHERE "type" = 'f'
               ) 
ORDER BY key;

这对应于问题中提供的结果。您的描述与这些结果并不完全匹配。