Mysql 需要了解此查询的解决方案

Mysql 需要了解此查询的解决方案,mysql,sql,mysql-error-1064,Mysql,Sql,Mysql Error 1064,我们将员工的总收入定义为其每月工作收入,最大总收入定义为员工表中任何员工的最大总收入。编写查询以查找所有员工的最大总收入以及总收入最大的员工总数。然后将这些值打印为空格分隔的整数。 这是为了更好地理解问题的链接 我是SQL的初学者,无法理解给出的解决方案 1.SELECT (months*salary) as earnings, 2.COUNT(*) FROM Employee 3. GROUP BY earnings 4. ORDER BY earnings DESC 5.LIMIT 1;

我们将员工的总收入定义为其每月工作收入,最大总收入定义为员工表中任何员工的最大总收入。编写查询以查找所有员工的最大总收入以及总收入最大的员工总数。然后将这些值打印为空格分隔的整数。 这是为了更好地理解问题的链接

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

1.SELECT (months*salary) as earnings,
 2.COUNT(*) FROM Employee
3. GROUP BY earnings
4. ORDER BY earnings DESC
 5.LIMIT 1;
我明白了第一步,我们给月薪一个别名,即收入 在第二步中,我们从employee表中计算员工数量。我不明白为什么我们在这里使用group by,第4步和第5步也很清楚,我们使用order by子句从最高到最低排列收益,限制1将获取最高值。但为什么要分组?
忽略1,2,3,4,5。这些只是我为了更清晰而使用的数字

步骤3:
按收益分组
用于将相同价值的收益分组。例如,如果你有3000美元的收入,其中有3个,它们将被分组在一起<代码>分组依据与聚合函数<代码>计数(*)结合使用也是必需的。否则,
COUNT(*)
将不起作用并返回错误

第4步:
按收益排序DESC
用于按降序对分组收益进行排序。也就是说,从最高收入下降到最低收入

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


希望这有帮助!:)

按聚合结果分组。当有多个“收益”具有相同值时,表中只有一个值。

您错误地拆分了查询

必须是:

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-计算表中每个记录的表达式
(月*工资)
的值

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

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

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

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

尝试此查询:

SELECT months*salary,COUNT(*) FROM Employee GROUP BY months*salary having count(*) = 7 ORDER BY months*salary DESC;
选择前1名(月*工资),计数(*)
从员工组按(月*工资)
按(月*工资)说明订购;

对于MS SQL server,请使用以上选项。

使用MySQL

select (months * salary) as earnings, -- select employee's total earnings to be their monthly  worked
count(*) -- select all data
from Employee 
group by earnings -- group by earnings to find the count of the number of employees who have earned max 
order by earnings desc -- order by descending to get the height earning to lowest earning 
limit 1; -- get the height earning and total number of employees who have maximum total earnings

好的,那么你的意思是每当我们使用计数函数时,我们总是使用group by?是的!更一般的答案是,在使用聚合函数时使用GROUP BY,但它并没有提供相同值的多个收益,实际上不需要它。你对此有何看法?是的,在这个例子中没有必要这样做。但是SQL查询应该始终对所有可能的数据开放。在本例中,如果一名员工获得加薪,并且现在的收入与另一名员工相同,那么您可以使用相同的查询,与不使用GROUP BY的查询相比,该查询具有更好的性能。因为你只返回结果的第一行,你可以看到(因为COUNT(*)有多少员工得到了这个收入。但是当我没有使用group BY子句时,我没有得到我的答案,因为你使用了COUNT(*)@HarshitaSingh第4步是计算输出值的步骤。什么是不清楚的?假设我的收入是1,1,2,3,4,5,那么count(*)将计算员工的收入数量,即六个,并按条款将相似的收入分组在一起?@HarshitaSingh您的收入将被分为五组,分别为1,2,3,4,5。对于每个组,一组中的记录量将分别计算为2,1,1,1(两行收入=1,一行收入=2,…)。我不知道计数函数在这里做什么。一切都很混乱,欢迎来到StackOverflow。请,当用密码回答问题时,不要只发布密码。在它旁边添加一个答案,解释代码的作用以及它解决问题的原因。谢谢