2012-03-19 45 views
0

我有以下查詢:組排序在MySQL

SELECT * FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 

該查詢可產生來自同一用戶(quotes.wp_user_id)多行,但是我只是想表明它有最大的屋頂面積行( quotes.roofarea)。

然而,當我加入GROUP BY quotes.wp_user_id它會自動最小quotes.ID行,而不是擁有最大quotes.roofarea行。將ORDER BY quotes.roofarea DESC添加到查詢結尾時,它將整個結果排序,而不僅僅是「GROUP BY」的結果。

任何人都可以幫助獲得所需結果的查詢?

感謝

回答

0

試試這個

SELECT * FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
AND quotes.roofarea = (SELECT MAX(q.roofarea) FROM quotes q WHERE q.wp_user_id = quotes.wp_user_id) 
GROUP BY quotes.wp_user_id 

立即檢查

+0

感謝您的查詢,但其作爲來自同一用戶的兩行仍顯示未正確分組。 – 2012-03-19 11:06:32

+0

如果這是公認的答案,那麼也upvote它.... :) – neeraj 2012-03-20 06:10:42

0

你必須命令你將它們分組前行。

SELECT * FROM (SELECT * FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
ORDER BY quotes.roofarea DESC) a 
GROUP BY a.wp_user_id 
+0

感謝您的查詢,我想,但收到以下錯誤:「數據庫錯誤重複列名‘ID’」 – 2012-03-19 11:05:43

+0

這可能是由引起*在內部SELECT語句中。嘗試列出所需的字段而不是*。兩個表中都有一個名爲ID的列。引號和quotes_panels。 SQL不知道選擇哪一個。 – 2012-03-19 14:58:08

0

在MySQL GROUP BYORDER BY之前完成的,所以你需要做的這兩個查詢:

SELECT * FROM 
    (SELECT * FROM quotes 
    INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
    WHERE quotes.created >= '$startDate' 
    AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
    ORDER BY quotes.roofarea DESC) AS subset 
GROUP BY subset.wp_user_id 
+0

感謝您的查詢,我想,但收到以下錯誤:行正確「數據庫錯誤重複列名‘ID’」 – 2012-03-19 11:07:14

0

您必須添加一個聚合函數是這樣的:

SELECT *, MAX(quotes.roofarea) FROM quotes 
INNER JOIN quotes_panels ON quotes.wp_user_id = quotes_panels.ID 
WHERE quotes.created >= '$startDate' 
AND quotes.created <= '$endDate' AND quotes.wp_user_id != '0' 
GROUP BY quotes.wp_user_id 

瞭解更多關於在這裏:​​

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

+0

感謝您的查詢,這組,但不挑最高quotes.roofarea該行一些原因? – 2012-03-19 11:08:19

+0

@ElliotReeve什麼數據類型是quotes.roofarea的? – fancyPants 2012-03-19 11:13:54

+0

quotes.roofarea是INT(11) – 2012-03-19 11:15:28