2013-02-21 32 views
0

我有3个表格:product,customertransaction如何加入这个条件的3表?

产品:

id_product price 
    1   1000 
    2   2000 

客户:

id_customer name 
    1   Tom 
    2   Jack 

交易:

id_transaction id_product  id_customer qty date 
    1     1    1   10 2013-02-21 
    2     2    1   50 2013-02-21 
    3     1    2   15 2013-02-21 

我想要实现这样的结果:

id_customer  name  total_transaction  purchase_qty  subtotal 
    1   Tom    2      60   110000 
    2   Jack   1      15    15000 

如何在MySQL中使用查询来获得该结果?

回答

1
SELECT t.id_customer, c.name, 
     COUNT(t.id_customer) AS total_transaction, 
     SUM(t.qty) as purchase_qty 
FROM transaction t 
INNER JOIN customer c 
ON t.id_customer = c.id_customer 
GROUP BY t.id_customer,c.name 
+0

@fenzkurol在该查询中没有小计......... – 2013-02-21 11:17:32

+0

@AdvaitAmin总的来说,我明白如何制作小计,但我只是忘了放组合(实际上我从来没有使用过)。所以,用团队解决我的问题。 – 2013-02-21 11:40:28

+0

@fenzkurol如果答案是可以接受的,那么它将满足提出问题的用户的所有要求。 – 2013-02-21 11:43:44

-1

你需要一个group by声明,因为要汇总结果对于一个给定的客户:

SELECT id_customer, name, count(id_transaction) AS total_transaction 
FORM Customer, Transaction 
WHERE Transaction.id_customer = Customer.id_customer 
GROUP BY id_customer 

这不会解决你的整个问题,但你的想法。

+0

我认为当你想加入2或多个表必须使用子查询或加入像客户为,交易为b。你怎么才能写transaction.id_customer = customer.id_customer? – 2013-02-21 10:48:41

+0

如果你不使用'as',那么你可以使用你的表名作为标识符 – Fabien 2013-02-21 14:52:06

0
SELECT cs.id_customer, cs.name, COUNT(tr.transaction) AS total_transaction, SUM(tr.qty) as purchase_qty, SUM(tr.qty*pr.prize) 
FROM customer AS cs 
LEFT JOIN transaction AS tr ON tr.id_customer = cs.id_customer 
LEFT JOIN product AS pr ON pr.id_product = tr.id_product 
GROUP BY cs.id_customer 

我想你是一个初学者,所以我为你做了这个。下一次,如果您有任何自己的想法,请给我们,所以我们不必为您编写整个查询。显示一些努力。

+0

我的错误是我永远不会使用group by,现在,我使用我自己的查询(使用子查询而不是JOIN),并且我把组通过和它给我想要的结果。顺便说一句,谢谢你的建议。 – 2013-02-21 11:23:14

0
SELECT c.id_customer, c.name, count(t.id_transaction) AS total_transaction 
FORM Customer c INNER JOIN Transaction T 
ON C.id_customer = T.id_customer 
GROUP BY c.id_customer 
+0

此查询不会产生所有需要的结果。 – 2013-02-21 10:52:33