SQL面试题:LIMIT和RANK窗口两种用法
面试问题
- 找出全世界最赚钱的 3 家公司。
- 输出结果以及相应的公司名称。
- 根据利润降序对结果进行排序。
这个问题取自stratascratch。
数据格式:
company:varchar |
解决方案1
- 我们需要在数据集中找到全球 3 家盈利的公司,我们已经获得了利润和公司名称。
- 因此,我们首先想到的就是按照公司的利润对公司进行排序。SQL 中的ORDER BY子句将完成这项工作。
- 由于我们首先需要最赚钱的公司,因此我们可以添加DESC和ORDER BY子句。
- 另外,我们需要前 3 家公司,我们可以通过添加 LIMIT 3 来获得。
SELECT |
解决方案2
- 第一个解决方案非常简单。但我们也可以使用窗口函数来实现这个问题。
- 这个想法是根据每家公司的利润对其进行排名,并返回排名为 3 或更低的公司。
- 为了计算排名,我们可以使用RANK()函数,该函数需要一个窗口,我们可以使用OVER()定义该窗口,该窗口接受分区和排序依据,这里分区将是窗口函数中默认的整个数据集,对于顺序,我们可以通过ORDER BY利润DESC。
- 下一个任务是从上述子查询中返回公司名称、利润和排名。为了返回 3 个最赚钱的公司,我们可以返回所有排名≤3 的公司。
SELECT |
总结
- 在本文中,我们解决了一个中等 SQL 问题,其中使用了ORDER BY、LIMIT和RANK窗口函数等子句。
- 我们讨论了 2 个解决方案并编写了代码。