2014-08-29 104 views
0

我的MySQL结构选择从和表的多个数据和统计

create table product(id integer(11), name varchar(100)); 

create table purchase(id_purchase integer(11), user_id integer(11), id_product integer(11), cost integer(11)); 

insert into product values (1,'product1'); 
insert into product values (2,'product2'); 
insert into product values (3,'product3'); 
insert into product values (4,'product4'); 

insert into purchase values (1, 1, 4, 10); 
insert into purchase values (2, 1, 4, 5); 
insert into purchase values (3, 1, 2, 16); 

我需要这个结果

id_product | sum(cost) | count 
------------------------------ 
1    0   0 
2    16   1 
3    0   0 
4    15   2 

通过ID产品针对一个用户分组

请帮助我。

+0

你看着到目前为止什么? (: – ljacqu 2014-08-29 05:50:59

回答

0

我不知道,你问这个问题之前做了很多的研究...

这里是你要找的查询:

SELECT PR.id 
    ,SUM(P.cost) AS [sum(cost)] 
    ,SUM(CASE 
      WHEN P.id_product IS NOT NULL THEN 1 
      ELSE 0 
      END) AS [count] 
FROM product PR 
LEFT OUTER JOIN purchase P ON P.id_product = PR.id 
          AND P.user_id = ... 
GROuP BY PR.id 
ORDER BY PR.id 

希望这会有所帮助。

+0

这种方式只得到存在的购买产品的记录,我需要统计的所有产品id – 2014-08-29 05:56:35

+0

我修正了我的查询,用这个'LEFT OUTER JOIN',每个现有产品和相应的统计数据将会有一行。它? – 2014-08-29 05:59:57

+0

这种方式工作完美。Thx – 2014-08-29 06:24:11

0

尝试这样

select id,case when cost is null then 0 else cost end as sum, 
case when p.cnt is null then 0 else p.cnt end as count from 
product left join (select id_product,sum(cost) as cost, 
count(*) as cnt from purchase group by id_product) as p on 
id=id_product group by id 

DEMO

+0

这种方式只适用于表中的一个user_id。对于许多user_id计算不正确 – 2014-08-29 06:23:52