Mysql触发器,将不同表中的两个值相乘,按组求和,并将值添加到另一列
这件事我已经讨论了一段时间了,我没办法弄明白。假设我有这三张桌子:Mysql触发器,将不同表中的两个值相乘,按组求和,并将值添加到另一列,mysql,sql,Mysql,Sql,这件事我已经讨论了一段时间了,我没办法弄明白。假设我有这三张桌子: Users Name | Basket value -------+--------------- John | ??? -------+--------------- Pierre | ??? Items User | Item | Amount -----------+------------+------------ John |
Users
Name | Basket value
-------+---------------
John | ???
-------+---------------
Pierre | ???
Items
User | Item | Amount
-----------+------------+------------
John | Pears | 2
-----------+------------+------------
Pierre | Pears | 1
-----------+------------+------------
Pierre | Apples | 3
Market_ prices
Item | Price
------------+---------------
Pears | 2.35
------------+---------------
Apples | 2.56
篮子价值是必需的。因此,对于项目中的每一行,它必须将其金额乘以市场价格[PRICE],并将按用户分组的所有结果相加,然后将此结果放入用户[total ITEMS value]中。但是,如何对语法进行详细阐述以将其付诸实践呢
非常感谢您的帮助。一种方法是加入相关表格:
SELECT User, SUM(rev) AS basket_price
FROM
(
SELECT a.User AS User, a.Amount*b.Price AS rev
FROM Items a
LEFT JOIN
Market_Prices b
ON a.Item = b.Item
) a1
GROUP BY User
SELECT u.name, SUM(i.amount*m.price)
FROM users u
JOIN items i ON u.name = i.user
JOIN market_prices m ON i.item = m.item
GROUP BY u.name;
SQLFIDLE位于:-我在表中添加了一些其他行以测试更高的复杂性,因此总数不是您从示例中得到的。具体来说,我将香蕉3.75添加到市场价格表中,并将John Apples 3和Pierre Banana 5添加到Items表中
这里的目标是通过连接通过共享字段链接所有三个表中的信息,同时将计算出的成本作为市场价格和项目数量的乘积进行分组和创建
--根据评论编辑--
要作为更新执行此操作,您可以尝试:
UPDATE users
SET basket_value = (SELECT basket FROM
(SELECT name, SUM(i.amount*m.price) AS basket
FROM users u JOIN items i ON u.name = i.username
JOIN market_prices m ON i.item = m.item
GROUP BY u.name) q1 WHERE q1.name = users.name);
我觉得有一个更优雅的解决方案,但这是可行的。修改后的SQLFiddle是:如果没有子选择,你能做同样的事情吗?是的,我想子查询在这里是多余的。也许你可以更新用户中的篮值列,而不是在选择中加入它。是的-这是可能的。实际上,我不清楚users表是作为表还是作为查询结果。我在这里忽略了数据库结构的一些问题。非常感谢!是的,用户表实际上是一个表。顺便问一下,你知道为什么basket_值只显示一次,并且在任何更新或刷新后变为null吗?调整了对用户表更新的响应。不知道你最近的问题是什么意思。