mysql - 加入后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
,它们加入了这个顺序..
解决方案
使用子查询来获取您的运费。像这样的东西:
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
推荐阅读
- azure-devops - 通过访问令牌使用 Azure DevOps 的 REST API 获取用户详细信息
- profiling - Valgrind 报告 RocksDB 中的内存泄漏
- caching - Magnolia“页面感知”缓存
- arrays - 如何使用 swift 将新数据传输到数组?
- corda - 在corda帐户中找不到匿名方(DLC2iDbLTxfABXk2UgFJzej8RbX6hUQuCjYBDJATYjYAJW)错误
- php - 我的捆绑包没有自动注册
- c# - 如何在 C# 中执行多级聚合?
- php - 无法将元素添加到数组
- vue.js - Vue.js:根据属性值动态创建 css 类
- python - 专注于多个小部件