2017-02-03 19 views
0

I以下の関係を有する:SQLクエリー、having節には何が表示されませんか?

R(A, B, C, D, E) 

と次のクエリを有する句に出現することはできませんどの

SELECT ... 
    FROM R 
    WHERE ... 
    GROUP BY B, E 
    HAVING ??? 

?:MAX(C)、COUNT(A)、D、B

私はそれらのすべてがうまくいくと信じていますが、私はグループ内の列cの最大値を縛ることができるので、MAX(C)については少し気にしません。 COUNT(A)と同じことです。 Dも動作します。これは単なる属性ですが、GROUP BY句のメンバーをバインドするのは変です。 (あなたがGROUP BYで何をすべきかである)レコードを集約するとき

+0

Dは動作しません。 HAVINGで 'GROUP BY B、E'を使うので、B、E以外の他の列は集計関数_で現れなければなりません。したがって、MAX(c)とCOUNT(a)は働くはずです。 Dは 'not by group by expression'のようなエラーを発生させます。 –

+0

D = ageとしましょう。年齢が30歳未満の場合はどうしたらいいですか?私はHAVING節がWHERE節と同じものだと思った。 – TheMathNoob

+1

HAVINGはGROUP BYと一緒に使用され、where_aggregate_functions_of_group_byとして意味しますので、HAVING MAX(age)<30'を使用できます。 WHERE節では、 'WHERE MAX(age)<30'を使用することはできません。 –

答えて

0

標準SQLによると、あなたがすることによって

  • フィールドにあなたのグループを選択することができます。 (もちろん、従業員と部門別にグループ化すると、従業員と部門ごとの結果行が必要な場合は、その結果に2つを表示できます)。
  • 集計(集計、カウントなど)私は従業員を数えたり給与を合計して結果に表示することができます。
  • フィールドはグループ化された列に依存しています。 (Iグループ独自の従業員番号であれば、私はまた、インスタンスのemployes名を表示することができます。)

多くのDBMSは、しかし、後者のケースをサポートする(および冗長GROUP BYで従業員の名前を入れて、あなたを強制しません例えば、従業員数が1つの場合には、MIN(name)のように、擬似集約にしてください)。

HAVING句には何が表示されますか?選択できるすべての列と式。

  1. MAX(C)。はい、BEごとに最大Cが見つかります。
  2. COUNT(A)。はい。 BおよびEごとにすべてのレコードを数えます(Aはnullではありません)。
  3. D。 DがBEに依存する場合のみDBMSは、テーブルのユニーク制約からこれを確認します。すなわち、BまたはEまたはB + Eがテーブルで一意である場合、Dを選択できます。 (ここでDBMSが標準に準拠していれば)
  4. B。はい。それはあなたがグループ化するBです。もちろん、それを表示したり、HAVINGで使用することができます。
関連する問題