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

Sql 如何获取被另一列分区的值的第一个实例?,sql,postgresql,Sql,Postgresql,我有一个表,我试图得到表中第一个性别为'M'的人和第一个性别为'F'的人 本例中的第一人称=按字母顺序按姓名排序 name | gender | .......other data A M B M C F D F E F M G F 如何获得第一个实例为'M','F'且没有空/空列的结果表? 理想结果: name | gender | ........other data A

我有一个表,我试图得到表中第一个性别为'M'的人和第一个性别为'F'的人

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

name | gender | .......other data
A        M
B        M
C        F
D        F
E             
F        M
G        F
如何获得第一个实例为'M','F'且没有空/空列的结果表?

理想结果:

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

谢谢你的帮助

您可以使用
row\u 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

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

您可以使用
row\u 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
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

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

Postgres中的一种方法是在上使用
distinct:

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
select distinct on (gender) t.*
from t
order by gender, name;

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

Postgres中的一种方法是在
上使用
distinct:

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

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

First:define
First
First。First的可能重复:define
First
First。distinct on的可能重复?@sagi。distinct on做什么?@sagi。我建议您使用
UNION ALL
而不是
UNION
;)。我建议您使用
UNION ALL
而不是
UNION
;)。