我们将雇员的总收入定义为他们每月的工作收入,最大总收入定义为雇员表中任何雇员的最大总收入。编写查询以查找所有员工的最大总收入以及总收入最大的员工总数。然后将这些值打印为空格分隔的整数。为了更好地理解这个问题,这是一个链接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;
我理解第一步,我们给月薪一个别名,它是收入,第二步,我们从雇员表中计算雇员人数。我不明白为什么我们在这里使用group by,第4步和第5步也很清楚,我们使用order by子句是为了将收益从高到低排列,限制1将获取最高值。但为什么要分组呢?忽略1,2,3,4,5。这些只是我为了更清晰而使用的数字
5条答案
按热度按时间8nuwlpux1#
第三步:
GROUP BY earnings
用于将相同价值的收益组合在一起。例如,如果你有3000美元的收入,其中有3个,它们将被分组在一起。GROUP BY
也需要与聚合函数结合使用COUNT(*)
. 否则,COUNT(*)
将不工作并返回错误。第四步:
ORDER BY earnings DESC
用于按降序排列分组收益。也就是说,从最高收益到最低收益。第五步:
LIMIT 1
将返回的行数限制为1。希望这有帮助!:)
oymdgrw72#
按聚合结果分组。当存在多个具有相同值的“收益”时,表中只有一个值。
3duebb1j3#
您错误地拆分了查询。
必须是:
步骤1-表格
Employee
用作数据源步骤2-表达式的值
(months*salary)
对于表中的每条记录步骤3-将具有(2)中表达式的相同值的记录视为一个组
步骤4-对于每个组,(2)中表达式的值放入输出缓冲区,计算组中记录的数量并将其添加到输出缓冲区
步骤5-输出缓冲区中的行按(2)中的表达式降序排列
步骤6-返回缓冲区中的第一行(即具有(2)中表达式的最大值的行)。
lx0bsm1f4#
对于ms sql server,请使用以上选项。
jum4pzuy5#
尝试此查询: