首页 > 解决方案 > 我无法在 mysql 中加入没有重复的两个表

问题描述

我有两张桌子:

  1. 成员(member_id,member_gender)
  2. 订单(order_id、member_id、order_amount)我必须检索有关会员数量、买家数量(至少有 1 个订单的会员)、订单数量的数据但不幸的是我很难,因为当我尝试加入这两个表时我收到了重复,我无法计算独特的成员所以我的初始代码是:SELECT count(m.member_id) AS Amount_of_members ,count(o.order_id) ,sum(o.order_amount) FROM tbl_member m LEFT JOIN tbl_order o ON m.member_id = o.member_id

标签: mysqljoincountleft-joindistinct

解决方案


您可以要求数据库仅计算成员 ID 的唯一出现次数

SELECT count(DISTINCT m.member_id) AS Amount_of_members

您还可以运行子查询将订单分组,以便在加入成员表之前每个成员只有一行,这意味着如果成员有 2 个订单,则成员数据不会加倍,如果有,则增加三倍3等

SELECT 
  count(m.member_id) AS Amount_of_members ,
  sum(x.count_orders) as total_count_of_orders,
  sum(x.sum_orders) as total_sum_of_orders
FROM 
  tbl_member m 
  LEFT JOIN (
    SELECT 
      o.member_id,
      count(o.order_id) as count_orders ,
      sum(o.order_amount) as sum_orders
    FROM
      tbl_order o
    GROUP BY o.member_id
 )x ON m.member_id = x.member_id

通常,“在连接完成之前将 1:M 关系的多方压缩为一行”是管理数据的有用方法,尤其是在需要进行多个连接的情况下。以 1:1 获得所有内容意味着不会弹出重复项


推荐阅读