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

具有连接和分组的MySQL子查询结果

松骏俊
2023-03-14

我很难让mySQL返回我想要的结果,因此希望有人能给我一些关于我错在哪里的指示。我有3个表(Sales\u Area、Orders、Rooflight\u Request),Orders包含一个Sales\u Area\u ID列以连接Sales\u Area,因此Sales\u Area可以有多个订单。Rooflight\u请求包含Order\u ID,因此一个订单可以有多个Rooflight\u请求。

Rooflight\u Request包含产品,我正在尝试按销售区域对订单分组中的rooflights总数(使用公式计算价格、折扣、汇率和数量)求和。

当我运行此查询时:

    SELECT salesArea.Area_Name,
(SELECT SUM(((rr.Price - (rr.Price * (rr.Discount /100))) / orders.Currency_Rate) * rr.Quantity) 
    FROM Rooflight_Request AS rr
    WHERE rr.Order_ID = orders.Order_ID
    AND rr.Record_Active = 1 
    AND rr.Alternative_Option <> 1
) AS Rooflights_Total
FROM Sales_Area AS salesArea
    LEFT JOIN Orders AS orders ON
        salesArea.Sales_Area_ID = orders.Sales_Area_ID
    LEFT JOIN Users AS users ON
        salesArea.User_ID = users.User_ID
GROUP BY salesArea.Area_Name

结果是按销售区域分组的,但我只收到一份价值相当的订单。如果我按订单交换组。Order_ID结果集包含所有订单和产品,但返回数千条记录,因为它不按销售区域分组。有人能告诉我哪里出了问题吗?谢谢

共有2个答案

郑声
2023-03-14

看着你的查询结构,我认为总计的子选择是不正确的...你应该(我的意见)尝试将rr按顺序加入到其他表中

SELECT  salesArea.Area_Name, SUM(((rr.Price - (rr.Price * (rr.Discount /100))) / orders.Currency_Rate) * rr.Quantity) 
FROM FROM Rooflight_Request AS rr
INNER JOIN Orders ON r.Order_ID = orders.Order_ID
LEFT JOIN Orders AS orders ON
    salesArea.Sales_Area_ID = orders.Sales_Area_ID
LEFT JOIN Users AS users ON
    salesArea.User_ID = users.User_ID
WHERE rr.Record_Active = 1 
    AND rr.Alternative_Option <> 1
GROUP BY salesArea.Area_Name
岳昊空
2023-03-14

试试这个,会有用的

选择SA。区域名称,总额(((RR.Price-(RR.Price*(RR.Discount/100)))/O.CuRRency\u Rate)*RR。数量)来自SA上的Sales\u Area SA内部联接订单O。Sales\u Area\u ID=O.Sales\u Area\u ID内部连接Rooflight\u请求RR ON RR。Order\u ID=O.Order\u ID,其中RR。Record\u Active=1和RR。备选\u选项

 类似资料:
  • 我有一个表“Quote”,映射在hibernate中,它有一个由整数id和日期组成的复合键,还有几个附加列。我想编写一个条件查询,它使用DetachedCriteria来获取每个id中日期最长的行。 在sql中,我可能会编写一个查询,比如 在hibernate中,我认为可以像这样为“group by”子查询创建DetachedCriteria(其中Quote是映射表的类,“Qid”是键的复合id类

  • 本文向大家介绍详解MySQL中的分组查询与连接查询语句,包括了详解MySQL中的分组查询与连接查询语句的使用技巧和注意事项,需要的朋友参考一下 分组查询 group by group by 属性名 [having 条件表达式][ with rollup] “属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所

  • 问题内容: 我正在尝试创建一个更新查询,并且在获取正确的语法方面进展甚微。以下查询正在运行: 它创建一个三元组的列表Index1,Index2,EventCounts。仅在t.SpecialEventCount为NULL的情况下才这样做。我尝试编写的更新查询应将此SpecialEventCount设置为该计数,即上述查询中的COUNT(m.EventType)。此数字可以是0或任何正数(因此为左联

  • 我有两个联合查询,如下所示: 现在,我想在另一个查询中使用此联合。 当我运行它时,我得到ORA-00904:"P"."CUSTOMER_NO":无效的标识符。我需要将h1.customer_no加入到外部查询customer_no。 我看到过一些带有rank的查询,但我不太明白。如何将内部查询与外部查询连接起来? 提前感谢。

  • 主要内容:GROUP BY单独使用,GROUP BY 与 GROUP_CONCAT() ,GROUP BY 与聚合函数,GROUP BY 与 WITH ROLLUP在 MySQL 中, GROUP BY 关键字可以根据一个或多个字段对查询结果进行分组。 使用 GROUP BY 关键字的语法格式如下: GROUP BY  <字段名> 其中,“字段名”表示需要分组的字段名称,多个字段时用逗号隔开。 GROUP BY单独使用 单独使用 GROUP BY 关键字时,查询结果会只显示每个分组的第一条记录。

  • 问题内容: 怪物编辑:查询现在将运行,但返回错误答案。添加了一个粗略的架构。PatientID不是tblPatientVisits表中的主键,因为同一患者ID可以出现多次。 列出了每个县名,但每个计数(s.countyName)和计数(t.countyname)为1 编辑:我有一个查询,现在运行,但它返回 问题答案: 没有样本数据和理想的结果很难说,但是也许这是您要追求的?