SQL 需要聚合函数而不是奇异值
Posted
技术标签:
【中文标题】SQL 需要聚合函数而不是奇异值【英文标题】:SQL requires aggregate function over singular value 【发布时间】:2016-04-14 14:15:43 【问题描述】:我有包含国家、名称和百分比列的表格语言。
样本集可能如下所示:
+---------+---------+------------+
| country | name | percentage |
+---------+---------+------------+
| usa | english | 85 |
| usa | spanish | 10 |
| usa | german | 5 |
| germany | german | 100 |
+---------+---------+------------+
I want to get
+---------+---------+------------+
| country | name | percentage |
+---------+---------+------------+
| usa | english | 85 |
| germany | german | 100 |
+---------+---------+------------+
select country, name, max(percentage) from language group by country
告诉我我需要将除一列之外的所有列放入聚合函数或分组依据。 如果将名称放入分组依据,您将得到原始表,因为所有国家和名称对都是唯一的。 名称应该是一个特定的值,因为只能有一对国家和最大百分比,所以也没有什么可以比较的,反正它是一个字符串。
我确信有一种简单的方法可以解决这个问题,无需执行任何第二个选择语句和连接表等。
【问题讨论】:
Classic example greatest-n-per-group 问题。 问题不在于如何解决,问题在于您是否可以通过类似于 OP 中的简单查询来解决它。 ... 最简单的查询在链接的答案中。您无法摆脱 DB2 上的某种连接/嵌套选择。 好的,非常感谢。如果你提交这个作为答案,我会给你闪亮的星星。 【参考方案1】:如果您想要最大百分比,请使用row_number()
:
select l.*
from (select l.*,
row_number() over (partition by country order by percentage desc) as seqnum
from language l
) l
where seqnum = 1;
【讨论】:
以上是关于SQL 需要聚合函数而不是奇异值的主要内容,如果未能解决你的问题,请参考以下文章