因此,我正在从事一个需要计算每个用户购物篮总价格的项目。我有以下表格:
users
+----+------------+-------+------------+
| id | group | name | bskt_price |
+----+------------+-------+------------+
| 1 | GroupA | John | 18.15 |
| 2 | GroupA | Pierre| 12.45 |
| 3 | GroupB | John | 4.95 |
Items
+--------+-------+--------+------------+------------+
| item | amount| price | username |group |
+--------+-------+--------+------------+------------+
| Pears | 11 | 1.65 | John | GroupA |
| Apples| 3 | 3.6 | Pierre | GroupA |
| Pears | 1 | 1.65 | Pierre | GroupA |
| Pears | 3 | 1.65 | John | GroupB |
products_list
+------------+------------+
| item | price |
+------------+------------+
| Apples | 3.6 |
| Pears | 1.65 |
当product_list中的价格更新时,我想自动计算每个用户的bskt_price。但是,我不希望每个用户而是一个组中每个用户的总数。就是我想知道A组中John的篮子价格,但不是全部Johns。
之前,我没有分组,并且在products_list上使用此触发器可以很好地工作:
UPDATE users
SET bskt_price = (SELECT basket FROM
(SELECT name, SUM(i.amount*m.price) AS basket
FROM users u JOIN items i ON u.name = i.username
JOIN products_list m ON i.item = m.item
GROUP BY u.name) q1 WHERE q1.name = users.name)
现在的问题是-如上所示-我已使每个用户都属于一个或几个组,但我无法使其正常工作。我尝试过类似的事情:
SELECT name, group, SUM(i.amount*m.price) AS basket
但是不行。谢谢您的帮助,谢谢。
答案 0 :(得分:1)
您解决此问题的一般方法似乎是正确的。我想到的诀窍是确保您在所有适当的位置都加入了表。尝试以下查询:
UPDATE users
SET bskt_price = (SELECT basket FROM
(SELECT u.group, name, SUM(i.amount*m.price) AS basket
FROM users u
JOIN items i ON u.name = i.username AND u.group = i.group
JOIN products_list m ON i.item = m.item
GROUP BY u.group, name) q1
WHERE q1.name = users.name AND q1.group = users.group)