更新处理大多数财产的人的工资

时间:2011-12-13 17:52:06

标签: mysql

任何人都可以帮我吗?

我需要增加处理最多财产的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。

1 个答案:

答案 0 :(得分:3)

首先,您需要计算每个员工拥有的房产数量。尝试这个来熟悉COUNT函数:

SELECT COUNT(*)
FROM Property;

对于表格中的每一行,您应该看到3的结果(基于上面显示的数据)。当然,总行数对你没有任何好处...你想知道每个工作人员的最高数量。 COUNT是聚合或组级函数,这意味着您必须执行GROUP BY查询。试试这个:

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(*);

...这也不是正确的顺序,所以请确保将其按DESCending顺序。

SELECT staffno, COUNT(*)
FROM Property
GROUP BY staffno
ORDER BY COUNT(*) DESC;

添加LIMIT 1以获得最高结果,从SELECT中删除COUNT(*),您应该能够弄清楚哪些staffno拥有最多的属性。让它工作,然后给UPDATE一个镜头。如果您仍需要帮助,请务必使用您的UPDATE代码尝试修改帖子

好的尝试......你是如此亲密。您需要做的就是修改您的WHERE以查找您在子查询中更新的行的“staffno”,如下所示:

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