我们将员工的总收入定义为其每月工作,而最大总收入则定义为“员工”表中任何员工的最高总收入。编写查询,查找所有员工的最大总收入以及最大总收入的员工总数。然后将这些值打印为空格分隔的整数。这是更好地理解https://www.hackerrank.com/challenges/earnings-of-employees/problem的问题的链接。
我是SQL的初学者,无法理解给出的解决方案。
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,这些只是我为了更清晰而使用的数字
发布于 2020-05-29 09:44:40
您错误地拆分了这个查询。
必须:
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)返回的表达式的最大值)。
发布于 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。
希望这会有帮助!)
发布于 2020-05-29 09:32:12
按汇总结果分组。当有多个数值相同的“收入”时,表中只有一个数字。
https://stackoverflow.com/questions/62082619
复制相似问题