如何获取由另一列分区的值的第一个实例?

时间:2016-02-14 13:29:49

标签: sql postgresql

我有一张桌子,我正试图让第一个人在性别=' M'并且第一个性别=' F'

的人

本案例中的第一人=按字母顺序排序名称

name | gender | .......other data
A        M
B        M
C        F
D        F
E             
F        M
G        F

如何使用' M'的第一个实例获取结果表? ,' F'没有null / empty列?

理想的结果:

name | gender | ........other data
A       M
C       F

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您可以像这样使用row_number()功能:

SELECT name,gender from (
    SELECT name,gender,
           row_number() OVER(PARTITION BY gender ORDER BY name ASC) as rnk
    FROM YourTable)
WHERE rnk = 1

如果需要,您可以在性别之后添加其他列。

答案 1 :(得分:1)

SELECT name, gender
FROM your table
WHERE gender = "M"
ORDER BY NAME
Fetch first row only

Union all

SELECT name, gender
FROM your table
WHERE gender = "F"
ORDER BY NAME
Fetch first row only

答案 2 :(得分:1)

Postgres中的一种方法是使用distinct on

select distinct on (gender) t.*
from t
order by gender, name;

这(方便地)不要求列出查询中的所有性别,可以使用(gender,name)上的索引,并且通常比row_number()更快。当然,缺点是这不是标准的,只适用于Postgres和Postgres派生的数据库。