2016-11-06 32 views
-1
SELECT c.id, c.name, COUNT(*) AS Number_of_Products 
FROM Product p 
JOIN Category c ON (p.CategoryId=c.Id) GROUP BY c.id,c.name,p.CategoryId; 

     ID NAME       NUMBER_OF_PRODUCTS 
---------- ------------------------------ ------------------ 
     1 LAPTOP           3 
     2 TV            1 


SELECT c.id, c.name, COUNT(*) AS Number_of_Products 
FROM Product p 
JOIN Category c ON (p.CategoryId=c.Id) GROUP BY c.name,c.id,p.categoryid; 

     ID NAME       NUMBER_OF_PRODUCTS 
---------- ------------------------------ ------------------ 
     2 TV            1 
     1 LAPTOP           3 

由於GROUP BY順序,以下查詢的結果不同。有人能解釋這種差異的原因嗎?GROUP BY中的SQL列排序優先級

謝謝!

+1

這些是不同的查詢。組中的順序很重要 –

+0

是的,我知道這些是兩個不同的查詢,但我的問題是基於按順序排序的翻轉查詢結果。儘管如此,我現在知道它的原因,謝謝。 –

回答

1

在內部,當RDBMS評估查詢時,它會對行進行排序以便高效地執行group by,然後由於缺少明確的order by子句,它會按該內部順序發出行。

但是,你永遠不能依賴這種行爲。如果您關心以特定順序返回行的查詢,則必須使用ORDER BY子句來指定該訂單。

0

如果您不提供ORDER BY子句,那麼GROUP BY排序通常是查詢結果的實際排序(儘管這可能因RDBMS而異;並行查詢可能導致結果無序排列) 。

如果您想要特定的順序,請添加一個ORDER BY子句,例如,

​​