首页 > 解决方案 > 加入后MySql和DISTINCT

问题描述

我有 2 个连接在一起的表(Orders 和 Order_item)当我使用连接时,我得到重复的记录,然后我用 消除它们DISTINCT,但是当我想得到总和时shipping_price DISTINCT不起作用,因为它只是消除了相同的价格值,我所有的价格是一样的,我得到 1 不是总和!

如果我不使用DISTINCT,我会按顺序获取每个项目的行

SELECT   sum(DISTINCT shipping_price) FROM `product_order`
INNER JOIN `product_address`
ON `product_order`.`address_id` = `product_address`.`id`
INNER JOIN `product_item`
ON `product_order`.`id` = `product_item`.`order_id`
WHERE (`status`<>2) 
AND (`company_id`=1968)
AND DATE(date)='2021-08-31'
ORDER BY `product_order`.`id` DESC

如何正确获得运费总和..

中的数据order_table

id     shipping_price    status 
       100
       200
       200
       100

sum = 600 ,但是如何得到它,如果我没有DISTINCT,我得到的每行计数超过一行order_items,它们加入了这个顺序..

标签: mysql

解决方案


使用子查询来获取您的运费。像这样的东西:

    SELECT product_order.id, 
           SUM(product_item.price * product_item.quantity) shipping_price
      FROM product_order
      JOIN product_item ON product_order.id = product_item.order_id
     GROUP BY product_order.id 

这里的诀窍是获得一个子查询,每个订单只提供一行,其中包含总运费。在子查询中执行 SUM() ... GROUP BY ...`。这样你就可以避免任何重复的项目。

在继续确保它有效之前进行测试:提供每个订单 ID 及其运费。

然后像使用一张桌子一样使用它,将它与其余部分连接起来。

SELECT   total.shipping_price,
         product_order.id,
         product_address.*
   FROM  product_order
   JOIN  product_address 
           ON product_order.id = product_address.order_id
   JOIN  (
        SELECT product_order.id, 
               SUM(product_item.price * product_item.quantity) shipping_price
          FROM product_order
          JOIN product_item ON product_order.id = product_item.order_id
         GROUP BY product_order.id 
         ) total ON product_order.id = total.id
  ORDER BY product_order.id = total.id

推荐阅读