我有一个包含两个表的数据库。他们是,
顺序(用户ID,姓名,指数,总)
std::vector<int> mVec = {1,4,7,8,9,0};
// filter out values > 5
auto gtFive = select_T<int>(mVec, [](auto a) {return (a > 5); });
// or > target
int target = 5;
auto gt = select_T<int>(mVec, [target](auto a) {return (a > target); });
paynow(用户ID,totalpayment)
userid | total
sandun | 2500
sandun | 4800
akmal | 1200
我需要在订单表中插入相应的userid时更新paynow表。所以我为此做了一个触发器。就在这里,
userid | totalpayment
sandun | 14000
akmal | 22500
但是它给出了这个错误。
#1064 - 您的SQL语法出错;检查与您的MariaDB服务器版本对应的手册,以便在'WHEN(NEW.userid IS NOT NULL)附近使用正确的语法 更新paynow SET totalpayment = totalpayment + N'在第5行
答案 0 :(得分:1)
MySQL
个触发器没有when
子句。您可以改为使用if
语句:
CREATE TRIGGER totals
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
IF NEW.userid IS NOT NULL THEN
UPDATE paynow
SET totalpayment = totalpayment + NEW.total
WHERE userid = NEW.userid;
END IF;
END;
答案 1 :(得分:0)
data['date'] = data['date'].astype('datetime64[ns]')
data.set_index('date').groupby('id').resample('Q')['data_1', 'data_2'].sum()
data_1 data_2
id date
123 2017-06-30 10 10
2017-09-30 90 90
2017-12-31 110 110
2018-03-31 0 0
234 2017-06-30 20 20
2017-09-30 180 180
2017-12-31 220 220
2018-03-31 0 0
子句对查询来说是多余的。您可以将其删除:
when
如果CREATE TRIGGER totals
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE paynow
SET totalpayment = totalpayment + NEW.total
WHERE userid = NEW.userid;
END;
为NEW.userid
,则不会更新任何行。假设你有一个NULL
的索引(我强烈强烈推荐),那么也没有那么多的性能损失。
此外,您是否关心paynow(userid)
可能是NEW.total
?我可以期待:
NULL