2011-02-23 171 views
5
SELECT 
    deal_woot.*, 
    site.woot_off, 
    site.name AS site_name 
FROM deal_woot 
INNER JOIN site ON site.id = site_id 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY site_id 
ORDER BY deal_woot.id DESC 
LIMIT 5 

我想在分組之前進行ORDER BY,我該如何做到這一點?GROUP BY查詢忽略ORDER BY子句

+0

你能舉一個你想要完成的例子嗎?你不能在你選擇的字段中進行分組,也不能在像sum()這樣的集合函數中使用這些字段。 – 2011-02-23 06:04:58

回答

-1
 
SELECT 
    deal_woot.*, 
    site.woot_off, 
    site.name AS site_name 
FROM deal_woot 
INNER JOIN site ON site.id = site_id 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY deal_woot.id DESC, site_id 
LIMIT 5 

我假設deal_woot.id是唯一的,Grouping將基於site_id

+0

一個不錯的簡單解決方案! – Webnet 2011-02-23 23:42:26

0

由於您按site_id分組,因此只會返回1 deal_woot行。嘗試訂購MAX(),這將返回每個site_id的最高id

SELECT 
    deal_woot.*, 
    site.woot_off, 
    site.name AS site_name 
FROM deal_woot 
INNER JOIN site ON site.id = site_id 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY site_id 
ORDER BY MAX(deal_woot.id) DESC 
LIMIT 5 

注:既然是UB什麼deal_woot行實際上返回,試圖吐涎你查詢:

SELECT 
    deal_woot.*, 
    site.woot_off, 
    site.name AS site_name 
FROM site JOIN (
    SELECT site_id, MAX(deal_woot.id) MaxID 
    FROM deal_woot 
    WHERE site_id IN (2, 3, 4, 5, 6) 
    GROUP BY site_id 
) sg ON site.id = sg.site_id 
    JOIN deal_woot 
    ON site.id = deal_woot.site_id AND deal_woot.id = sg.MaxID 
ORDER BY sg.MaxID DESC 
LIMIT 5 
1

有了這樣一個子查詢:SELECT *,COUNT(*) FROM (SELECT * from actions order by date DESC) AS actions GROUP BY ip;

0

您正在對site_id執行GROUP BY,並且正在安排deal_woot.id上的記錄。

即使您在羣組之前執行Order By,輸出也會保持不變。

您是否有任何具體的要求去做這件事,因爲您的疑問與訂購無關。