表1:usermaster
uid uname
1 abc
2 xyz
3 pqr
4 def
表2:transactionmaster
tid uid amount type
1 1 100 1
2 2 500 1
2 2 500 2
3 1 350 1
3 1 150 2
在交易表中输入:
1 for capital
2 for interest(5% of total capital)
现在,我想每月计算资本金额interest
和资本价值5%的广告利息。
应该传递查询,其中:为具有大写的用户自动在transactionmaster
表中添加兴趣条目。
结果在transactionmaster
表中应该是这样的。
tid uid amount type
1 1 100 1
2 2 500 1
3 1 600 1
4 1 35 2
5 2 25 2
此处interest
也会自动计算5%。
答案 0 :(得分:0)
这样的事情可以解决问题:
INSERT INTO transactionmaster (uid, amount, type)
SELECT uid, ((SUM(amount) / 100) * 5), 2
FROM transactionmaster
WHERE type = 1
GROUP BY uid
我认为tid
字段是自动提取
编辑: 上面的查询是onehot。即它会系统地为所有具有“类型1”的uid创建“类型2”条目。换句话说,如果你多次使用它,你最终会得到重复的“类型2”条目。
如果您想仅为“类型1”INSERT“类型2”行还没有“类型2”行,您可以这样做:
INSERT INTO transactionmaster (uid, amount, type)
SELECT t1.uid, ((SUM(t1.amount) / 100) * 5), 2
FROM transactionmaster t1
LEFT JOIN transactionmaster t2 ON t1.uid=t2.uid AND t1.type=1 AND t2.type=2
WHERE t2.tid IS NULL
GROUP BY t1.uid
编辑2以回答您的评论。
假设您创建了一个具有以下结构的intrustmaster表:
loweramt | higheramt | perc
---------------------------
100 | 199 | 5
200 | 399 | 4
oneshot查询将成为:
INSERT INTO transactionmaster (uid, amount, type)
SELECT T.uid, ((totamt /100) * i.perc), 2
FROM
(
SELECT uid, (SUM(amount) / 100) as totamt
FROM transactionmaster
WHERE type = 1
GROUP BY uid
) T
INNER JOIN intrustmaster I
ON t.totamt BETWEEN i.loweramt AND i.higheramt
答案 1 :(得分:0)
要在每个月自动获得结果,您需要使用MySQL事件安排SQL查询。
这是参考 1)http://www.infotuts.com/schedule-sql-query-using-phpmyadmin-mysql-events/
从transactionmaster获取资金总和
select sum(amount) from transactionmaster where uid = 13 and type=1
现在计算兴趣
select sum(amount) * (5 / 100) as interest from transactionmaster where uid=13 and type=1
简单!