1

假设我有一张人桌,其中有namegender (M/F)age

返回的 SQL 查询会是什么样子:

  • 所有女性
  • 最多5名男性
  • 按年龄排序的人

注意。这是一个人为的例子。此外,欢迎使用 Postgres 特定的答案。

4

1 回答 1

4
SELECT name, gender, age
  FROM ( SELECT name, gender, age
           FROM people
           WHERE gender = 'F'
         UNION ALL
         ( SELECT name, gender, age
             FROM people
             WHERE gender = 'M'
             LIMIT 5  
         )
       ) x
  ORDER BY age

请注意,上述解决方案没有选择任何特定的男性。如果需要,将排序应用于男性子查询。

这个在修剪发生之前按年龄对雄性进行排序:

SELECT name, gender, age
  FROM ( SELECT name, gender, age
               ,ROW_NUMBER() OVER (PARTITION BY gender ORDER BY age) gender_count
           FROM people
        ) x
   WHERE gender = 'F'
      OR gender_count <= 5

顺便说一句,我发现“性别”通常用于语法参考。在这种情况下,“性”将是我会使用的术语。

于 2012-05-22T01:59:33.390 回答