如何在mysql中优化这三表查询?
这是我的三个表,如何在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 但这并不是完美的结果,
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