对此的SQL查询仅限制记录的子集

时间:2012-05-22 01:50:05

标签: sql postgresql

假设我有一个人员表,包含行namegender (M/F)age

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

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

NB。这是一个人为的例子。此外,Postgres特定的答案也欢迎。

1 个答案:

答案 0 :(得分: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

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