如何将列值设置为“ 1”,其中sum(price)> = 88
例如:如果客户A的总和(价格)大于或等于88,则交货将更新为“ Y”
客户表:名称,价格,交货期(我只列出了重要的一列)
我的SQL查询:
UPDATE customer
SET delivery ='Y'
WHERE (SELECT SUM(price) FROM customer
GROUP BY name )>=88;
错误:您无法在FROM子句中指定目标表“客户”进行更新
请参阅附表:
答案 0 :(得分:0)
将列设置为您从表中选择的值,而不将其分组。
SET COLUMN_X = (SELECT SUM(price) FROM customer)
现在使用查询,它看起来更干净
UPDATE customer
SET delivery ='Y'
WHERE COLUMN_X = >=88;
答案 1 :(得分:0)
您没有说您正在使用哪个数据库(或哪个版本),因此您可以尝试使用此 standard SQL
with
x as (
select name
from customer
group by name
having sum(price) > 88
)
update customer c
set delivery = 'Y'
where name in (select name from x)
答案 2 :(得分:0)
@TheImpaler基本上是相同的东西,但是带有子查询而不是CTE
。
获取首先符合条件的名称,然后加入该列表以进行UPDATE
语句。
UPDATE t
SET delivery = 'Y'
FROM
#t AS t
JOIN
(
SELECT
name
,SUM(price) AS total
FROM
#t
GROUP BY
name
HAVING
SUM(price) >= 88
) AS d
ON
d.name = t.name;
这里是正常工作的Rester:https://rextester.com/LQWE88535
答案 3 :(得分:0)
要更新的表和子选择之间没有任何联接。您的桌子上实际上没有钥匙,但是根据您显示的内容,我会这样做:
Component
因此,基本上,它会获取每个客户的名称以及总和或其订单价格,但仅在总和超过88的情况下。然后,它仅从该子选择中提取名称,并且仅更新列表中存在该名称的行总计超过88个订单的名称。