【问题标题】:Select multiple data from tables with sum and count从带有 sum 和 count 的表中选择多个数据
【发布时间】:2014-10-23 02:44:10
【问题描述】:

我的 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 产品分组

请帮帮我。

【问题讨论】:

  • 到目前为止你看过什么? (:

标签: mysql sql select left-join where


【解决方案1】:

我不确定你在问这个问题之前做了很多研究......

这是您要查找的查询:

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

希望这会有所帮助。

【讨论】:

  • 这种方式只获取现有购买产品的记录。我需要所有产品 ID 的统计数据
  • 我修正了我的查询,有了这个LEFT OUTER JOIN,每个现有产品和相应的统计信息都会有一行。你能测试一下吗?
【解决方案2】:

这样试试

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

【讨论】:

  • 这种方式仅适用于表中的一个 user_id。对于许多 user_id 计算不正确
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
相关资源
最近更新 更多