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

vybvopom  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(623)

这件事我已经讨论了一段时间了,我想不通。假设我有三张table:

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

篮子价值是必需的。因此,对于项目中的每一行,它必须乘以 AMOUNTMARKET_PRICES[PRICE] 并将所有结果按 USER 把这个结果放到 USERS[total items value] . 但是,如何详细阐述语法以将其付诸实践呢?
非常感谢你的帮助。

vecaoik1

vecaoik11#

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
gab6jxml

gab6jxml2#

一种方法是连接相关表:

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;

(本文的第二部分是:http://sqlfiddle.com/#!9/ec224/6-我向表中添加了一些其他行以测试更复杂的情况,因此总数不是您从示例中得到的结果。具体来说,我补充道 Bananas 3.75 市场价格表 John Apples 3 以及 Pierre Bananas 5 到items表。)
这里的目标是通过共享字段(通过join)链接所有三个表中的信息,同时将计算出的成本作为市场价格和项目数量的乘积进行分组和创建。
----根据评论编辑——要将此作为更新,您可以尝试:

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);

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

相关问题