MySQL触发器将来自不同表的两个值相乘,按组求和并将值添加到另一列

时间:2018-09-10 23:36:00

标签: mysql sql

我已经解决了一段时间,没有办法解决。假设我有以下三个表:

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

需要购物篮值。因此,对于ITEMS中的每一行,都必须将其AMOUNT乘以MARKET_PRICES[PRICE],然后将按USER分组的所有结果相加,然后将此结果放入USERS[total items value]中。但是如何详细说明语法以实现这一点呢?

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

一种方法是联接相关表:

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;

(SQLfiddle的位置是:http://sqlfiddle.com/#!9/ec224/6-我在表中添加了其他几行来测试更多的复杂性,因此总数并不是您从示例中得到的。具体来说,我添加了{ {1}}到Market_prices表,Bananas 3.75John Apples 3到Items表。)

这里的目标是通过共享字段(通过JOIN)链接所有三个表中的信息,同时还分组并创建作为市场价格和项目数量乘积的计算成本的总和。

----根据评论进行编辑---- 要将其作为更新,您可以尝试:

Pierre   Bananas    5

我觉得有一个更优雅的解决方案,但这可行。修改后的SQLFiddle是:http://sqlfiddle.com/#!9/56245a/1

答案 1 :(得分:0)

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