如何在mysql中优化这三表查询?

如何在mysql中优化这三表查询?,mysql,Mysql,这是我的三个表,如何在mysql查询中获得输出。我将尝试此代码 SELECT c.name , SUM(o.amount) oamount , SUM(p.amount) pamount FROM customer c JOIN `order` o ON o.cus_ID = c.cus_ID JOIN payment p ON p.cus_ID = c.cus_ID GROUP BY c.cus_ID 但这并不是完美的结果,

这是我的三个表,如何在mysql查询中获得输出。我将尝试此代码

SELECT c.name
     , SUM(o.amount) oamount
     , SUM(p.amount) pamount 
  FROM customer c
  JOIN `order` o 
    ON o.cus_ID = c.cus_ID
  JOIN payment p 
    ON p.cus_ID = c.cus_ID 
 GROUP 
    BY c.cus_ID

但这并不是完美的结果,请帮助解决此问题,因为您正在处理所有客户,并且为了防止每个订单/付款表中一个表的记录多于另一个表的虚假笛卡尔产品,请仅在客户ID上为每个分组的子查询创建联接

我已经对子查询进行了左连接,以防出现没有付款或没有订单阻止记录被包括在内的条目。不需要最终的group by,因为每个客户记录将只有一条,并且由于基础子查询也按客户id分组,因此每个子查询最多只有一条记录,并且不会产生笛卡尔集

SELECT 
      customer.name, 
      COALESCE( sumOrder.TotalOrders, 0 ) AS oamount, 
      COALESCE( sumPay.TotalPay, 0 ) AS pamount 
   FROM 
      customer 
         LEFT JOIN 
         ( select o.cus_id,
                  sum( o.amount ) as TotalOrders
              from 
                 order o 
              group by
                 o.cus_id ) sumOrder
            ON customer.cus_ID = sumOrder.cus_ID 
         LEFT JOIN 
         ( select p.cus_id,
                  sum( p.amount ) as TotalPay
              from 
                 payment p
              group by
                 p.cus_id ) sumPay
            ON customer.cus_ID = sumPay.cus_ID 

请在问题中加入必要的代码、DDL和示例数据。图片并没有真正的帮助我在帖子中插入样本数据如果可能,请帮助解决这个问题query@mmm,我同意不使用图像,但作为新手,他们会学到。。。另外,Nazmul,单击“帮助->浏览站点eitquette”也可以在将来帮助您。@DRapp也不想显得不礼貌。如果人们将需要回答的内容直接包含在问题中,那么帮助他们就更容易了。请注意,order在MySQL中是一个保留字,这使得它作为表/列标识符的选择很糟糕。谢谢你,DRapp,它是working@nazmul伟大的作为一个新手,看看帮助->浏览网站礼仪,并将问题标记为已解决,以便其他人知道搜索类似问题的有效方法,或者仍然需要其他答案。
SELECT 
      customer.name, 
      COALESCE( sumOrder.TotalOrders, 0 ) AS oamount, 
      COALESCE( sumPay.TotalPay, 0 ) AS pamount 
   FROM 
      customer 
         LEFT JOIN 
         ( select o.cus_id,
                  sum( o.amount ) as TotalOrders
              from 
                 order o 
              group by
                 o.cus_id ) sumOrder
            ON customer.cus_ID = sumOrder.cus_ID 
         LEFT JOIN 
         ( select p.cus_id,
                  sum( p.amount ) as TotalPay
              from 
                 payment p
              group by
                 p.cus_id ) sumPay
            ON customer.cus_ID = sumPay.cus_ID