2011-01-18 4 views
2

「Sams Teach Yourself SQLを10分で、第3版で」、レッスン10「データのグループ化」、「グループの作成」、トン以下のことを理解して:Sams 10分間でSQLを教える - 質問GROUP BY

「別に集計計算文から、SELECT文のすべての列がGROUP BY句に存在しなければなりません。」

はなぜ?私はこれを試して、私はそれが真実ではないと思う。 たとえば、 'World'という表に 'continent'、 'country'、 'population'という列があるとします。

SELECT continent, country 
FROM World 
GROUP BY continent; 

この本によれば、これはエラーにつながるはずですか?しかし、それはしません。大陸に応じてデータをグループ化することができます(結果は7つの大陸になります)。各大陸の隣には、ランダムな国名があります。あなたはおそらくSELECT句でMySQLallows ungrouped and unaggregated expressionsを使用しているこの

continent   country 
North America  Canada 
South America  Brazil 
Europe   France 
Africa   Cameroon 
Asia    Japan 
Australia   New Zealand 
Antarctica  TuxLand 

答えて

4

同様

これはもちろん標準の違反です。

。これはPRIMARY KEYに参加してGROUP BYを簡素化するためのものである:

SELECT a.*, SUM(b.value) 
FROM a 
JOIN b 
ON  b.a_id = a.id 
GROUP BY 
     a.id 

通常、あなたが持っているでしょうどちらかGROUP BY句にaからすべての列を追加するか、サブクエリを使用します。

MySQLは、aのすべての値が(グループ化されている)PRIMARY KEYの特定の値で同じであることが保証されているため、これを行わないようにしています。

+0

をありがとうございました。はい、私はMySQLを使用しています。 – SQLBeginner

0

これは正しく、MySQLなどの一部の形式のSQLではエラーを生成しません。必要に応じて、複数の列でGROUP BY文を使用することもできますが、必須ではありません。

0

GROUP BYは指定された列の最初の結果を表示します。そのため、最初の国/大陸のペアが返されます。

PostgreSQLとMySQLでは、グループに1つのフィールドを使用してこれを許可しています。

このチュートリアルでは、すべてのフィールドでGROUP BYを使用する必要があると仮定しているため、選択したものからデータを失うことはありません。上記の例ではすべての国/大陸が表示されます。

ここでは例としてテーブルがあります:最初の文で

Continent  | Country  | Random_Field 
--------------------------------------------- 
North America  Canada   Cake 
North America  Canada   Dog 
South America  Brazil   Cat 
Europe   France   Frog 
Africa   Cameroon  House 
Asia    Japan   Gadget 
Asia    India   Dance 
Australia   New Zealand  Frodo 
Antarctica  TuxLand   Linux 

SELECT continent, country 
FROM World 
GROUP BY continent; 

出力は次のようになります。

Continent  | Country  
-------------------------- 
North America  Canada 
South America  Brazil 
Europe   France 
Africa   Cameroon 
Asia    Japan  
Australia   New Zealand 
Antarctica  TuxLand 

お知らせにもかかわらず、アジアの行の1つを失いました。異なっている。両方にGROUP BYを使用して

SELECT continent, country 
FROM World 
GROUP BY continent, country; 

がもたらすであろう:

Continent  | Country  
    ----------------------------- 
    North America  Canada 
    South America  Brazil  
    Europe   France  
    Africa   Cameroon  
    Asia    Japan  
    Asia    India  
    Australia   New Zealand 
    Antarctica  TuxLand