2017-02-10 16 views
1

私は、次のような問題があります。SQLの基本的な構文

Problem

問合せの選択にBのために要求していない場合はどうなりますが?。私は、集計がselect句の値に基づいて計算されるため、エラーが発生すると思います。

Iは、以下の関係スキーマとクエリを持っている:

と仮定R(A、B)は、単一のタプル(NULL、NULL)との関係です。

SELECT A, COUNT(B) 
FROM R 
GROUP BY A; 

SELECT A, COUNT(*) 
FROM R 
GROUP BY A; 

SELECT A, SUM(B) 
FROM R 
GROUP BY A; 

最初のクエリはNULLと0を返します。2番目のクエリが返すものについてはわかりません。集合COUNT(*)は、1つのテーブル内のタプルの数を数えます。しかし、私はそれがグループに何をするのか分からない。 3番目がNULL、NULLを返します

答えて

2

これはコメントには長すぎます。

唯一のルールは、およそSELECTGROUP BYSELECTで凝集していない列が(非常に特定の例外を除いて)GROUP BYなければならないということです。

GROUP BYの列は、SELECTには表示されません。それは結構です。グループの定義には影響しませんが、複数の行がGROUP BY列に同じ値を持つように見えることがあります。

+0

最初のクエリがBのようなものなしで返されるものSELECT A SUM(C)、MAX(D) – daniel

+0

たとえば、Aを選択した場合、$ a1b1 $と$ a1b2 $の2つのタプルがあるとします。集計SUM(C)では、両方のグループの合計を計算しますか? – daniel

+0

@ダニエル。 。 。私はそのコメントを理解しているか分からない。クエリは 'select by'で指定された列を' group by'で定義された行で返します。 –