我有一张桌子,我正试图让第一个人在性别=' 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
感谢您的帮助!
答案 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派生的数据库。