首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要理解此查询的解决方案

需要理解此查询的解决方案
EN

Stack Overflow用户
提问于 2020-05-29 09:21:59
回答 11查看 13.7K关注 0票数 1

我们将员工的总收入定义为其每月工作,而最大总收入则定义为“员工”表中任何员工的最高总收入。编写查询,查找所有员工的最大总收入以及最大总收入的员工总数。然后将这些值打印为空格分隔的整数。这是更好地理解https://www.hackerrank.com/challenges/earnings-of-employees/problem的问题的链接。

我是SQL的初学者,无法理解给出的解决方案。

代码语言:javascript
复制
1.SELECT (months*salary) as earnings,
 2.COUNT(*) FROM Employee
3. GROUP BY earnings
4. ORDER BY earnings DESC
 5.LIMIT 1;

我明白了第一步,我们给一个月的薪水,一个别名,这是收入,在第二步,我们正在计算的数字。雇员表中的员工。我不明白为什么我们要在这里使用组,第4步和第5步也很清楚,我们使用order子句将收入从最高到最低排序,而限制1将给我带来最高的价值。但为什么要分组呢?忽略1,2,3,4,5,这些只是我为了更清晰而使用的数字

EN

回答 11

Stack Overflow用户

发布于 2020-05-29 09:44:40

您错误地拆分了这个查询。

必须:

代码语言:javascript
复制
SELECT (months*salary) as earnings, -- 2 and 4
       COUNT(*)                     -- 4
FROM Employee                       -- 1
GROUP BY earnings                   -- 3
ORDER BY earnings DESC              -- 5
LIMIT 1;                            -- 6

步骤1-表Employee用作数据源。

步骤2-计算表中每个记录的表达式(months*salary)的值。

步骤3-具有来自(2)的表达式相同值的记录被视为一个组。

步骤4-对于每个组,将表达式(2)的值放入输出缓冲区,并计算组中的记录数量并将其添加到输出缓冲区中。

步骤5-输出缓冲区中的行按(2)降序按表达式排序。

步骤6-返回缓冲区中的第一行(即从(2)返回的表达式的最大值)。

票数 2
EN

Stack Overflow用户

发布于 2020-05-29 09:31:37

步骤3:使用 GROUP BY earnings对相同的价值收益进行分组。例如,如果你有3,000美元的收入,而其中有3个,它们将被聚在一起。GROUP BY与聚合函数COUNT(*)相结合也是必需的。否则,COUNT(*)将无法工作并返回错误。

步骤4: ORDER BY earnings DESC用于按递减顺序排列分组收益。意思是,从最高收入下降到最低收入。

步骤5: LIMIT 1将返回的行计数限制为1。

希望这会有帮助!)

票数 1
EN

Stack Overflow用户

发布于 2020-05-29 09:32:12

按汇总结果分组。当有多个数值相同的“收入”时,表中只有一个数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62082619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档