有人能帮我吗?
我需要把处理最多财产的人的工资提高1000英镑。
工作人员:

staffno | salary
_________________
A1      | 12000
_________________
A2      | 9000
_________________
A3      | 11000
_________________
A4      | 3000

属性:
propertyno | staffno
_____________________
B23        | A2
_____________________
B76        | A2
_____________________
B34        | A1

UPDATE staff
SET salary = salary +1000
WHERE EXISTS
(SELECT staffno
FROM property
GROUP BY staffno
ORDER BY COUNT(*) DESC
LIMIT 1);

所以这是我得到的,但它更新了所有的值,而不是我想要的1。

最佳答案

首先,你需要计算每个工作人员有多少财产。通过尝试以下操作熟悉COUNT函数:

SELECT COUNT(*)
FROM Property;

对于表中的每一行,结果应该是3(基于上面显示的数据)。当然,总行数对你没什么好处……你想知道每个员工的最高行数。COUNT是一个聚合或组级别的函数,这意味着您必须按查询进行分组。试试这个:
SELECT staffno, COUNT(*)
FROM Property
GROUP BY staffno;

基本上,“GROUP BY staffno”告诉MySQL每个staffno只显示一行,而COUNT则汇总每个staffno的总行数。现在,您希望按staffno分组的数据按其拥有的属性数排序,因此在底部添加一个ORDER by:
SELECT staffno, COUNT(*)
FROM Property
GROUP BY staffno
ORDER BY COUNT(*);

…这也不是正确的顺序,所以一定要按降序排列。
SELECT staffno, COUNT(*)
FROM Property
GROUP BY staffno
ORDER BY COUNT(*) DESC;

添加一个LIMIT 1以获得最上面的结果,从SELECT中删除COUNT(*),您应该能够找出哪个staffno拥有最多的属性。让它工作,然后给更新一个镜头。如果您仍然需要帮助,请确保使用更新代码尝试编辑您的文章。
很好的尝试…你很接近。您只需要修改您在子查询中查找要更新的行的“staffno”的位置,如下所示:
UPDATE staff
SET salary = salary +1000
WHERE staffno =
(SELECT staffno
FROM property
GROUP BY staffno
ORDER BY COUNT(*) DESC
LIMIT 1);

08-28 12:58