在MySQL中获取2个值的总和(1在子查询中)

在MySQL中获取2个值的总和(1在子查询中),mysql,select,sum,Mysql,Select,Sum,我对这个本该简单的问题束手无策。我想我已经做了所有的努力,因为MySQL SELECT语句对我来说相当复杂 我试图从MySQL SELECT语句中获取两个关键数字字段的和值。我已经尝试过明显的变化,但是我无法使子查询中的字段值Regs可用于父查询,以执行以下操作。。。SUMRegs+作为总计持有。求求你,求求你,救命 这是我的SQL代码 SELECT p.product_id AS ID, FROM_UNIXTIME(p.cdate, '%c/%e/%y') A

我对这个本该简单的问题束手无策。我想我已经做了所有的努力,因为MySQL SELECT语句对我来说相当复杂

我试图从MySQL SELECT语句中获取两个关键数字字段的和值。我已经尝试过明显的变化,但是我无法使子查询中的字段值Regs可用于父查询,以执行以下操作。。。SUMRegs+作为总计持有。求求你,求求你,救命

这是我的SQL代码

SELECT p.product_id AS ID, FROM_UNIXTIME(p.cdate, '%c/%e/%y') AS CDate, FROM_UNIXTIME(p.mdate, '%c/%e/%y') AS MDate, p.product_sku AS SKU, s.mf_category_city AS Town, s.mf_category_county AS County, s.mf_category_state AS State, org.mf_name AS Org, s.mf_category_name AS Site, p.product_name AS ClassName, DATE_FORMAT(p.startDate, '%a %m-%d-%Y') AS StartDate, DATE_FORMAT(p.endDate, '%a %m-%d-%Y') AS EndDate, DATE_FORMAT(p.startTime, '%l:%i %p') AS StartTime, DATE_FORMAT(p.endTime, '%l:%i %p') AS EndTime, p.age_from, p.age_to, pr.product_price AS Price, CASE WHEN p.class_status = 0 THEN 'A' WHEN p.class_status = 1 THEN 'C' WHEN p.class_status = 2 THEN 'S' END AS Status, p.product_publish AS Published, p.precode AS Code, CASE WHEN p.product_refered = 'N' THEN 'USG' WHEN p.product_refered = 'Y' THEN 'REC' WHEN p.product_refered = 'B' THEN 'BOTH' END AS REC, p.class_target AS Target, (SELECT SUM(oi.product_quantity) FROM (jos_sport_childs_xrf AS scx) LEFT JOIN jos_vm_order_item AS oi ON scx.product_id = oi.product_id WHERE scx.product_id = p.product_id AND oi.order_status IN ('C','P') GROUP BY scx.child_id LIMIT 1) AS Regs, p.class_held AS Held, p.total_registrations AS Total, p.site_usage_fee AS Fee, p.player_usage_fee AS PlayerFee, p.player_usage_percent AS PlayerPercentage, u.name AS RD, p.product_desc AS Notes, CASE WHEN cxref.category_parent_id = 42 THEN 'USSI' WHEN cxref.category_parent_id = 98 THEN 'USSI' END AS Company, p.belongs_to AS BelongsTo, p.missdate1 AS Missdate1, p.missdate2 AS Missdate2, p.missdate3 AS Missdate3 FROM (jos_vm_product AS p) INNER JOIN jos_vm_manufacturer_category AS s ON p.venue = s.mf_category_id LEFT JOIN jos_vm_product_price AS pr ON pr.product_id = p.product_id INNER JOIN jos_users AS u ON p.user_id = u.id INNER JOIN jos_vm_product_category_xref AS x ON p.product_id = x.product_id INNER JOIN jos_vm_category_xref AS cxref ON x.category_id = cxref.category_child_id LEFT JOIN jos_vm_manufacturer AS org ON s.mf_category_org = org.manufacturer_id WHERE p.startDate BETWEEN '2015-03-02' AND '2015-06-14' AND x.category_id IN (102,120,99,106,104,94,59,84,105) AND u.id NOT IN (33731,46660)
HOLD有一个简单的数值,子查询返回记录的总和。

让我们单独查看子查询,不使用相关引用,因此

SELECT SUM(oi.product_quantity) 
     , scx.product_id
  FROM jos_sport_childs_xrf scx
  JOIN jos_vm_order_item oi 
    ON scx.product_id = oi.product_id 
 WHERE oi.order_status IN ('C','P')     
 GROUP 
    BY scx.child_id;

在这里,我们选择产品id,因为我们知道以后会需要它,但我们按子id分组。这很糟糕。我们应该怎么做?

限制1的作用是什么?为什么要在子查询中使用外部联接呢?另外,请注意,单独存储日期和时间通常不是一个好主意。我倾向于避免相关子查询。相反,您可以通过在子查询的SELECT子句中包含scx.child_id,然后在该子句上进行连接,将其作为不相关的子查询进行连接。我不知道这是否对你有帮助,但我认为可能会。谢谢你到目前为止的评论。。。Th MySQL确实显得过于复杂,但这是必要的。这个项目的数据结构一直很复杂。限制1是必要的,因为在没有限制的情况下,我们很难在Regs中获得正确的和值。我知道这意味着另一个问题,我将在以后研究如何改进SQL,但现在我只需要处理这些问题,因为我知道这是一个已经运行了7年的系统。我也希望避免相关的子查询,但是由于我必须解决的时间很短,目前我看不到明确的解决方法。我将不受限制地进行测试1,以提醒自己问题是什么。正如前面的评论中提到的,我删除了限制1,以提醒自己子查询中以前的错误。。。[Err]1242-子查询返回的行数超过1行,因此我知道子查询有一些不太好的地方,但是如果使用LIMIT 1,它确实返回了正确的值,即输出中可见的Regs。但是,无法获得Regs+hold=?的总值?如果返回正确的答案,那么它很幸运!我仍然不知道子查询的问题是什么?我可以通过该子查询正确计算3500多条记录的总数。我只是无法将返回的值添加到保留的整数中进行合计。正如我试图解释的那样,您选择了一件事,但按另一件事分组。您声称这给出了正确的答案,但除非child_id和product_id都是唯一的,否则在我看来这是荒谬的。