选择所有列,按其他要求分组

时间:2016-07-25 04:19:19

标签: sql-server

这不是原始表,我创建了类似的情况,以便我可以更好地解释问题。 假设我有一个叫[学生]的表,有4列:[姓名],[性别],[年龄],[国家]。

如何执行返回满足此要求的行的'SELECT *'查询:

  1. 学生必须是男性
  2. 每个国家只有一名学生
  3. 如果某个国家/地区的学生不止一个,请选择最早的学生
  4. 我尝试在[country]上使用GROUP BY但是继续收到错误“Column'...'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”

1 个答案:

答案 0 :(得分:1)

一种可能的方法:

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Country ORDER BY Age DESC) RN 
    FROM students 
    WHERE gender = 'male') T 
WHERE RN = 1;

子查询仅选择男生,并根据他们的年龄为他们分配一个行号,按国家/地区划分。

相关问题