任何人都可以帮我吗?
我需要增加处理最多财产的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。
答案 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);