Mysql查询匹配属于某个组的特定个人

时间:2018-10-07 21:13:03

标签: mysql database

因此,我正在从事一个需要计算每个用户购物篮总价格的项目。我有以下表格:

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

但是不行。谢谢您的帮助,谢谢。

1 个答案:

答案 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)