2012-12-29 166 views
0

查詢排序這是我當前的查詢搶我的交易:基於另一個querys AVG

SELECT deals.*, SUM(orders.cost) AS 'revenue' FROM deals 
LEFT JOIN orders ON (orders.deal_id = deals.id) 
WHERE 1 
AND (orders.status = 'new' OR orders.status = 'delivered') 
GROUP BY deals.ID 
ORDER BY revenue ASC 

現在這個偉大的工程,我可以排序此查詢(ORDER BY)的任何領域我希望在訂單或交易表。

然後當我遍歷交易和同一個foreach(), 我有這個疑問搶客戶的平均分點評的交易顯示出來:

SELECT ROUND(AVG(stars)) as 'avg_stars' FROM deals_reviews WHERE deal_id = *THE DEAL_ID* AND active = '1' 

現在我想排序的所有ASC/DESC的交易來自平均星級。

要做到這一點,它需要我把這個查詢與上面的一個合併,當我需要顯示avg_stars時,我從第一個也是唯一的查詢中獲取這個值,而不是第二個查詢。

如何將該查詢合併到第一個中?所以當這樣做完成後,我們可以做ORDER BY avg_stars DESC,它會按這個排序?

回答

0

我不知道如果我的理解對不對,但是這應該是解決方案

SELECT deals.*, SUM(orders.cost) AS 'revenue' FROM deals 
LEFT JOIN orders ON (orders.deal_id = deals.id) 
LEFT JOIN deals_reviews ON (deals.id = deals_reviews.deal_id AND active = '1') 
WHERE 1 
AND (orders.status = 'new' OR orders.status = 'delivered') 
GROUP BY deals.ID 
ORDER BY ROUND(AVG(stars)) as 'avg_stars' ASC 
+0

你好它的工作時,我把ROUND(AVG(星星))爲「avg_stars」到選擇,然後ORDER BY avg_stars。然而,檢查我的更新問題上面的查詢,我需要在交易_reviws中檢查active = 1,我將如何做到這一點? – Karem

+0

好的更新我的答案againe,現在跳得很好。 – GreenRover