MySQL 具有多个连接的另一列上的求和和不同

标签 mysql sql join distinct

我需要编写一个 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/

相关文章:

sql - 用于大量更改密码的简单 sql

php - 在 codeigniter 中使用 Order By

mysql - phabricator 在 dockerized php 容器中找不到 dockerized mysql

mysql - 如何从多个连接表中正确使用 GroupBy

android - 我如何处理SQLiteConstraintException错误代码19?

MySQL 返回 : errno: 150 - foreign key error

mysql - 是否可以将字符串附加到一个查询中的许多匹配行

mysql - 与 3 个相关表连接

SQL 查询(没有子查询)

windows - 如何在批处理文件中组合数字和字符串