我需要编写一个 MySQL 查询来提供有关已定义用户的统计信息。假设我需要销售量、他加入的群组数量以及他获得的 friend 数量。
SELECT SUM( sells.qtty ) sells,
SUM( sells.price ) total,
COUNT( DISTINCT groups.id ) groupsTotal,
COUNT( DISTINCT friends.id ) friendsTotal
FROM members
LEFT JOIN sells
ON sells.idmember = members.id
LEFT JOIN groups
ON groups.idmember = members.id
LEFT JOIN friends
ON friends.idmember = members.id
where members.id = 3
假设这给了我 40 个群组和 20 个 friend 。我无法在销售表的 ID 列上使用不同的。因此,这些总和给了我疯狂的销售量(如果是真实的那就太好了,但在尝试显示统计数据时则不然)。
我在这里很困惑...提前感谢您的帮助!
最佳答案
您需要在连接之前进行聚合。一种方法是在 from
子句中使用子查询:
select s.sells, s.total, g.groupsTotal, f.friendsTotal
from members m left outer join
(select s.idmember, sum(s.qtty) as sells, sum(s.price) as total
from sells s
where s.idmember = 3
) s
ON s.idmember = m.id left outer join
(select g.idmember, count(*) as groupstotal
from groups g
where g.idmember = 3
) g
on g.idmember = m.id left outer join
(select f.idmember, count(*) as friendstotal
from friends
where f.idmember = 3
) f
on f.idmember = m.id
where m.id = 3;
通常,子查询中的 where
子句将改为 group by
。但您只选择一个成员,因此在每个子查询中进行过滤会更有效。
关于MySQL 具有多个连接的另一列上的求和和不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510915/