Sql 如何获取被另一列分区的值的第一个实例?
我有一个表,我试图得到表中第一个性别为'M'的人和第一个性别为'F'的人 本例中的第一人称=按字母顺序按姓名排序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
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:defineFirst
First。First的可能重复:defineFirst
First。distinct on的可能重复?@sagi。distinct on做什么?@sagi。我建议您使用UNION ALL
而不是UNION
;)。我建议您使用UNION ALL
而不是UNION
;)。