2016-02-03 14 views
0

我会回到这一点。所以基本上我有3个表结构如下:使用sql与多个表格调用求和

订单:

i_id | o_id | quantity 
-----+--------+---------- 
    1 | 1 |  5 
    2 | 2 |  2 
    1 | 3 |  3 
    1 | 4 |  3 
    2 | 5 |  4 

orderinfos:

o_id | c_id 
------+------------ 
1 | 1 
2 | 2 
3 | 2 
4 | 1 
5 | 2 

客户:

c_id | name_id 
----------+---------- 
    1 | 100001 
    2 | 100002 

然后将得到的图表将是:

name_id | i_id | quantity 
-----------+----------+---------- 
100001  | 1  | 8 
100002  | 2  | 6 
100002  | 1  | 3 

所以基本上,你有一些东西(在这种情况下,订单)与他们的数量的摘要,然后在每个订单有客户ID和项目名称关联。然后,生成的图表将按客户的降序排列每个客户的数量。我的第一个实现是这样的:

select quantCust.custIdName, quantCust.itemId, quantCust.quant 
from 
    (select O.i_id as itemId, 
    C.name_id as custIdName, 
    sum(O.quantity) as quant 
    from orders as O, orderinfos as I, customers as C 
    where O.o_id = I.o_id and I.c_id = C.c_id 
    group by O.i_id, I.c_id) as quantCust 
order by quantCust.custId, quantCust.quant desc; 

它不会打印正确的值。

回答

1

我觉得你接近你的方法,但我建议使用的JOIN语法,并使用总金额(与GRO​​UP BY一起),让您汇总:

SELECT c.name_id, i_id, SUM(quant) AS quant 
FROM customers c 
INNER JOIN orderinfo oi 
ON c.c_id = oi.c_id 
INNER JOIN orders o 
ON oi.o_id = o.o_id 
GROUP BY c.name_id, i_id 
ORDER BY c.name_id, quant DESC 

这对我的作品有您的样本数据,给出您指示的所需输出。