我已经解决了一段时间,没有办法解决。假设我有以下三个表:
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]
中。但是如何详细说明语法以实现这一点呢?
在此先感谢您的帮助。
答案 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.75
和John 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