【发布时间】:2016-07-25 15:36:02
【问题描述】:
这不是原始表,我创建了类似的情况以便更好地解释问题。 假设我有一个名为 [student] 的表,有 4 列:[name]、[gender]、[age]、[country]。
如何执行“SELECT *”查询以返回满足此要求的行:
- 学生必须是男性
- 每个国家只有一名学生
- 如果一个国家有多个学生,选择年龄最大的一个
我尝试在 [country] 上使用 GROUP BY,但不断收到错误“列 '...' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中”
【问题讨论】:
-
任何不是聚合的列,都必须出现在 GROUP BY 子句中。向我们展示您现有的代码
-
SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY Country ORDER BY Age DESC) RN FROM myTable WHERE gender = 'male') T WHERE RN = 1;? -
@ZLK 它有效!如果您提交为答案,我会将您的标记为答案。多亏了你,我今天才知道 ROW_NUMBER 和 PARTITION。
标签: sql-server