当前位置: 首页 > 知识库问答 >
问题:

加入后的MySql和DISTINCT

林君博
2023-03-14

我有2表连接在一起(订单和Order_item)当我使用连接我得到重复的记录,然后我消除他们与DISTINCT,但当我想得到总和shipping_priceDISTINCT不工作,因为它只是消除了相同的价格值,我所有的价格都是一样的,我得到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

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

订单表中的数据是

id     shipping_price    status 
       100
       200
       200
       100

sum=600,但如何获得它,如果我没有区分,我会在每个订单中获得多行\u加入订单的项目的行计数。。


共有2个答案

汝墨一
2023-03-14

使用子查询而不是联接。

SELECT (
    select sum(shipping_price) 
    FROM product_item 
    WHERE po.`id` = `product_item`.`order_id` 
) as shipping_price
FROM `product_order` po
INNER JOIN `product_address`
ON `product_order`.`address_id` = `product_address`.`id`
WHERE (`status`<>2) 
AND (`company_id`=1968)
AND DATE(date)='2021-08-31'
ORDER BY `product_order`.`id` DESC
仲孙兴平
2023-03-14

使用子查询获取装运价格。大概是这样的:

    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 

这里的诀窍是获得一个子查询,该子查询只为每个订单提供一行,其中包含汇总的发货价格。做你的算术。。。分组方式…`在子查询中。这样可以避免项目重复。

在继续之前测试一下,以确保它能正常工作:给出每个订单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
 类似资料:
  • 目前我有以下查询: 产出: 它可以工作,但在加入前限制注释表。结果是,它选择前5个注释并映射它。id为5的所有评论将被忽略。 谢谢

  • 问题内容: 我有两个表,其中一个命名如下 另一个表具有以下字段: SID CID Per 如何为以下内容编写触发器: 如果表h1-h0的任何字段中发生 更新,则使用以下值更新表中的列: ((总数为1s-总数为0s / (总数1s +总数0s))/ 100 在此先感谢 我开发了一个触发器,但是它不起作用,它在第11行说了错误,您能说出什么问题吗? 问题答案: 在定义触发器之前,请确保更改定界符。另外

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 是否有任何文献记载的技术可以加快mySQL转储和导入的速度?

  • 问题内容: 我已经能够使用以下原始sql获取查询结果: 但是我还不能使它雄辩地工作。 根据一些类似的答案,我曾尝试在或中执行功能,但尚未过滤每个人的操作。就目前而言: 我至少在标题 大致 正确的方向,正确的…? 如果相关,则该模型具有两个关系: 问题答案: 因此,作为参考,我像这样解决了它: 奇怪的是,其中的子句需要语音标记才能使变量正确通过sql查询(同样,“ 2”似乎不起作用,而“ 2”却可以

  • 问题内容: 几个月前,我和其他人一起用PHP编写了一个简单的应用程序。在那里,我们需要根据一个用户ID和您需要从该用户ID选择的行中获取的另一个值,从多个表中执行SELECT。 我的第一个想法是创建多个SELECT并解析PHP脚本中的所有输出(使用所有mysql_num_rows()和类似的函数进行检查),但是那个家伙告诉我他会这样做。“好的没问题!” 我想,我的写作要少得多。好吧,当我发现他只用

  • 问题内容: 我有一个应用程序,需要通过大量条目更新大量数据。基本上,它执行约7,000次插入和/或更新,但需要花费很长的时间(例如将近9分钟…平均每个查询约0.08秒)。从本质上讲,我正在寻求提高速度来处理多个此类请求(我不希望对我模糊的示例提出具体的答案……只是希望,可以帮助解释)。 以下是对请求进行概要分析的一些示例: 重复一遍恶作剧(大约7,000次)。这是一个更新,它收集在24小时内定期生