如何在三个表中得到总和

时间:2013-12-15 21:49:23

标签: mysql

我有3个表:DefMatiere,其中包含项目的名称和表格成分,其中包含已使用的数量和StockData,其中包含已购买的数量及其值。

我写了这个查询,用于获取使用和购买的物品和数量的名称以及支付的金额。

SELECT dm.nom, SUM(IF(dm.id=ig.matid, ig.qty, 0)) AS used,
SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0)) AS achete, 
SUM(DISTINCT IF(dm.id=sd.matid ,sd.montant*(1+(sd.tvaval/100)) ,0)) AS val, 
(SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0))- SUM(IF(dm.id=ig.matid, ig.qty, 0))) AS restant
FROM DefMatiere AS dm 
LEFT JOIN ingredient AS ig ON ig.matid=dm.id 
LEFT JOIN StockData AS sd on sd.matid = dm.id 
WHERE dm.type = 1 GROUP BY dm.nom

这给了我想要的东西,但它似乎是一个非常长的烦恼的罗马。

是否可以使用别名进行这些计算LIKE achete - val AS restant

因为我想添加val / achete *使用val / achete * restant在这种情况下我的查询变得像RINGS 6卷的LORD。

或者我必须继续写我的罗马?任何帮助都会教我

[编辑]

然而,在输入更多数据后,我发现此查询不正确。

因为如果在StockData中有多个具有相同matid的行,则我使用的结果会根据行数加倍或三倍。

HERE查询结果和我找到的解决方案

HERE就是我解决的问题。但我找不到合适的查询。

1 个答案:

答案 0 :(得分:0)

我认为你的问题相对简单,但并不是那么简单,我想坐下来为你编写SQL。

但是既然你要求接受教育,我认为这很好,我认为从长远来看这将是最有帮助的:

我认为编写SQL(以及学习编写SQL)的最佳方法不是从头开始,而是使用带有向导的更强大的图形SQL工具。我使用Microsoft Access 2003,但还有许多其他SQL工具可用。在这样的工具上,您可以轻松设置模型,链接和查询并总结您心中的喜悦。

当我在php中构建困难的查询时,我经常首先在SQL图形用户界面中对查询进行建模,然后一旦我得到了我想要的总数,我就保存了生成的SQL并将其插入到php中。