2014-05-04 293 views
1

好了,所以我一直試圖讓這個查詢現在小時的工作,但沒有我似乎做會得到我,我之後的結果。SQL查詢,子查詢減子查詢?

SELECT COALESCE(SUM(ps.cost), 0) AS ps_total 
FROM Customers c 
    LEFT JOIN ProductSales ps ON c.customer_ID = ps.customer_ID 
GROUP BY c.sex; 

SELECT COALESCE(SUM(hc.cost), 0) AS hc_total 
FROM Customers c 
    LEFT JOIN HairCuts hc ON c.customer_ID = hc.customer_ID 
GROUP BY c.sex; 

所以上述兩個查詢工作正常。每個人都會發現花在產品或頭髮上的總花費以及成羣的花費,因此給了我單獨花在男性和女性上的花費和產品的總花費。然而,不管怎樣,我需要將它們結合起來以便我可以顯示性別( s)的花費更多的是產品而不是理髮。

任何幫助,這將是非常讚賞。

P.S希望這個問題是清楚。如果不是,請嘗試詳細說明。

回答

0

的另一種方式,你可以加入你的兩個查詢結果

SELECT t1.sex, 
COALESCE(t1.ps_total - t2.hc_total,0) AS `difference` 
FROM 
(SELECT COALESCE(SUM(ps.cost), 0) AS ps_total ,c.sex 
FROM Customers c 
    LEFT JOIN ProductSales ps ON c.customer_ID = ps.customer_ID 
GROUP BY c.sex) t1 
LEFT JOIN 
(SELECT COALESCE(SUM(hc.cost), 0) AS hc_total ,c.sex 
FROM Customers c 
    LEFT JOIN HairCuts hc ON c.customer_ID = hc.customer_ID 
GROUP BY c.sex) t2 
USING(sex) 
HAVING difference > 0 

從評論編輯

我用很短的語法像USING(sex) = ON(t1.sex=t2.sex)ON()條款,如果你有一個相同的名字兩個表中的列,如果你有不同的,那麼你需要使用ON()語法,你可以使用USING()

表1列(CATEGORY_ID主鍵,...)

表2列(CATEGORY_ID外鍵,...)

然後你就可以很容易地使用USING()

SELECT * FROM 
Table1 
JOIN Table2 
USING(category_id) 

但是,如果你有關聯不同的名字,那麼你需要使用ON()條款

+0

這是如此接近。而不是僅僅顯示差異,而是這樣做。我需要它顯示性別,只有當差異大於1時才顯示。如果女性購買更多商品而不是剪切,則顯示男性。如果女性購買的商品多於剪裁,則顯示女性。那有意義嗎? – user3596312

+0

@ user3596312看到我更新的答案,這是你需要的嗎? –

+0

這就是我所需要的,只是你有一個沒有group by子句的子句。我剛纔補充說,在它之前按性別分組。也不是最好> 0;不是1?就是想。 – user3596312