有人能帮我吗?
我需要把处理最多财产的人的工资提高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);