繁体   English   中英

如何在与MySQL相同的查询中使用SUM和COUNT并获得准确的结果

[英]How can I use SUM and COUNT in the same query with mysql and get accurate results

我有两个表一对一的关系。 更具体地说,t1是订单信息,t2是这些订单的行项目详细信息。

我正在尝试使用这样的查询:

   SELECT COUNT(DISTINCT(t1.id)) order_count,
          SUM(t1.order_total) order_total,
          SUM(t2.product_price) product_total,
          DATE(t1.order_date) order_date
     FROM t1
LEFT JOIN t2 ON t1.id = t2.id
 GROUP BY t1.order_date

该查询返回order_count的正确值。 但是,其他值被错误地夸大了。 我知道使用左联接我要添加额外的行,这就是为什么总和不正确的原因。 我只是不确定如何解决它。

任何帮助将不胜感激。

编辑:输出应该是这样的:

DATE | 订单数| 累计

我根据响应在下面开发了查询。 它会正确返回所有值,除了coupon_total每次都会返回0之外。

SELECT
COUNT(DISTINCT(o.order_number)) order_count,
DATE(o.order_date) order_date,
SUM(o.total_product_total) product_total,
SUM(o.total_shipping) shipping_total,
SUM(o.total_grand_total) grand_total,
o.coupon_total
FROM (
 SELECT
 DATE(o.order_date) order_date,
 o.order_number,
 o.total_product_total,
 o.total_shipping,
 o.total_grand_total,
 IF(op.record_type='cpn',SUM(op.price),0) coupon_total
 FROM orders o
 LEFT JOIN orders_products op ON o.order_number=op.order_number
 GROUP BY o.order_number
) o
GROUP BY DATE(o.order_date)
ORDER BY o.order_date DESC

我会使用子查询来首先求和子表的值

SELECT t1.id, t1.order_total, SUM(t2.product_price) product_total
FROM t1 LEFT JOIN t2 on t1.id=t2.id 
GROUP BY t1.id, t1.order_total

该查询返回所有单个订单及其产品总价。

使外部查询对order_total求和并返回计数

SELECT COUNT(DISTINCT(t1.id)) order_count,
       SUM(t1.order_total) order_total,
       SUM(t2.product_price) product_total
FROM (
  SELECT t1.order_date, t1.id, t1.order_total, SUM(t2.product_price) product_total
  FROM t1 LEFT JOIN t2 on t1.id=t2.id 
  GROUP BY t1.order_date, t1.id, t1.order_total
) GROUP BY t1.order_date

不保证该代码确实有效,我的SQL有点生锈...但是我希望您能明白。

编辑 (响应您的编辑...)

IF -construct在您的代码中放错了位置:要么使用SUM(IF(op.record_type='cpn',op.price,0))要么更好的是,在内部查询中放置WHERE子句,仅选择OP与record_type='cpn' ,即使它

....
SUM(op.price) coupon_total
FROM orders o
LEFT JOIN orders_products op ON o.order_number=op.order_number
WHERE op.record_type='cpn'` 
GROUP BY o.order_number
....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM