连接多个表时避免重复行

时间:2015-07-20 01:57:10

标签: mysql join subquery left-join

我有3个表的问题:第一个(用户)包含汽车经销商,第二个和第三个(Order_new,Car_demo)包含经销商销售的两种类型的汽车。我需要总结经销商的销售数量和利润。 不幸的是,它无法正常工作。其中一个经销商从Order_new出售了11辆汽车,从Car_demo出售了1辆,但是当我使用COUNT时,从Order_new(好)获得11,从Car_demo获得11(不好......)。与SUM相同 - 来自Car_demo我获得利润x 11。 这是代码的重要片段:

SELECT
    d.name AS name,
    COUNT(cn_renault.id) AS ren_p,
    COUNT(cd_renault.id) AS ren_demo_p,
    SUM(cn_renault.profit) AS cn_profit,
    SUM(cd_renault.profit) AS cd_profit,
FROM User d
LEFT OUTER JOIN (
    SELECT DISTINCT
        cd2.id AS id,
        cd2.dealer AS sale_by,
        cd2.price AS price,
    FROM Order_new cd2
    LEFT OUTER JOIN Car car ON car.id = cd2.car_brand
    WHERE DATE(cd2.' . $by . ') >= \'' . $date . '\' AND DATE(cd2.' . $by . ') < \'' . $date_end . '\' AND car.brand = \'Renault\'
    GROUP BY cd2.id
) cn_renault ON cn_renault.sale_by = d.id
LEFT OUTER JOIN (
    SELECT DISTINCT
        cd2.id AS id,
        cd2.sale_by AS sale_by,
        cd2.selling_price AS price,
    FROM Car_demo cd2
    LEFT OUTER JOIN Car car ON car.id = cd2.car_brand
    WHERE DATE(cd2.' . $by_d . ') >= \'' . $date . '\' AND DATE(cd2.' . $by_d . ') < \'' . $date_end . '\' AND cd2.sale_status >= 2 AND car.brand = \'Renault\'
    GROUP BY cd2.id
) cd_renault ON cd_renault.sale_by = d.id
WHERE d.id = ' . $dealer_id . '
GROUP BY d.id

我知道我可以这样做:

LEFT OUTER JOIN (
        SELECT DISTINCT
            COUNT(cd2.id) AS number_of,
            SUM(cd2.price) AS price,
        FROM Order_new cd2
        LEFT OUTER JOIN Car car ON car.id = cd2.car_brand
        WHERE DATE(cd2.' . $by . ') >= \'' . $date . '\' AND DATE(cd2.' . $by . ') < \'' . $date_end . '\' AND car.brand = \'Renault\'
        GROUP BY cd2.dealer
    ) cn_renault ON cn_renault.sale_by = d.id

并且它有效,但我需要汽车ID才能在查询中加入另一个表...

有什么想法吗?

0 个答案:

没有答案
相关问题