2016-11-06 100 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子句,例如,

​​