在MySQL中获得2个值(在SubQuery中为1)的SUM

时间:2015-03-17 19:46:09

标签: mysql select sum

我最终会遇到这个(应该是简单的)问题。我想我已经完成了所有的努力工作(因为这个MySQL SELECT语句相当复杂恕我直言(无论如何)。

我试图从MySQL SELECT语句中获取两个关键数字字段的SUM值。我尝试过明显的变化,但是我无法从父查询可用的子查询中使字段值“Regs”执行类似...... SUM(Regs + Held)AS Total的操作。拜托,拜托,求助!

这是我的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)

Held具有简单的数值,SubQuery返回记录的SUM总值。

1 个答案:

答案 0 :(得分:0)

让我们孤立地看一下子查询,没有相关参考,所以...

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;

这里我们SELECT product_id(我们这样做是因为我们知道我们以后会需要它),但我们GROUP BY child_id。这是不好的。我们该怎么办呢?