我们定义一个员工的总收入为其每月的工作时间,最大总收入为员工表中任何员工的最大总收入。写一个查询来查找所有员工的最大总收入以及拥有最大总收入的员工总数。然后将这些值打印成以空格分隔的整数.这是问题的链接,以便更好地理解 https:/www.hackerrank.comchallengesearnings-of-employeesproblem
我是一个SQL初学者,无法理解所给出的解决方案。
1.SELECT (months*salary) as earnings,
2.COUNT(*) FROM Employee
3. GROUP BY earnings
4. ORDER BY earnings DESC
5.LIMIT 1;
我理解了第一步,我们给月份*工资一个别名,也就是收入,第二步我们从雇员表中计算雇员人数。我不明白为什么这里要用group by,第四步和第五步也很清楚,我们用order by子句是为了将收入从高到低排序,limit 1会让我得到最高值。但是为什么要用group by呢?忽略1、2、3、4、5。这些只是我为了更清楚的使用的数字而已
第3步:用GROUP TOGETH来查找员工的收入。 GROUP BY earnings
用来GROUP TOGETHER相同值的收入。例如,如果你有3000元的收入,而且有3个,就会被分组在一起。GROUP BY
也需要结合集合函数 COUNT(*)
. 否则 COUNT(*)
将无法工作并返回一个错误。
步骤4: ORDER BY earnings DESC
是用来排序的 GROUPED EARNINGS 按DESCENDING顺序。也就是说,从最高收入到最低收入。
第5步:将返回的行数限制为1。 LIMIT 1
将返回的行数限制为1
希望这能帮助你 :)
GROUP BY聚合你的结果。当有多个数字的 "收入 "具有相同的值只是一个单一的在你的表中。
你错误地拆分了查询。
必须是。
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)
表中每条记录的计算方法是
第4步--对于每一个组,将(2)中的表达式的值放入输出缓冲区,计算出一个组中的记录量,并添加到输出缓冲区中。
第5步--输出缓冲区中的行按照表达式从(2)开始降序排列。
第6步--返回缓冲区中的第一行(即表达式(2)中的最大值)。