2016-11-06 20 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

はい、私はこれらが2つの異なるクエリであることを知っていますが、私の質問は、グループごとに基づいて、フリップされたクエリ結果を参照しました。それにもかかわらず、私は今、それの理由を知っています、ありがとう。 –

答えて

1

内部的には、RDBMSはクエリを評価するため、group byを効率的に実行するために行を順序付けし、明示的な句がないため、その内部順序で行を発行します。

しかし、この動作に決して頼ることはできません。特定の順序で行を戻す問合せが気になる場合は、ORDER BY句を使用してその順序を指定する必要があります。

0

ORDER BY句を指定しないと、GROUP BYの順序付けは一般的に問合せ結果の順序付けとなります(ただし、RDBMSによって異なる可能性がありますが、パラレル問合せによって結果が順序なしになる可能性があります) 。

特定の順序が必要な場合は、ORDER BY句を追加します。

​​