可能な重複:
SQLにおけるGROUP BY /集計関数の混乱 /
私はエラーを得ました -
列 'Employee.EmpID'は、集約関数にもGROUP BY文節にも含まれていないため、選択リスト内では無効です。
select loc.LocationID, emp.EmpID
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by loc.LocationID
この状況は、Bill Karwinによる回答に適合しています。
上記の修正は、ExactaBoxによる回答に収まります -
select loc.LocationID, count(emp.EmpID) -- not count(*), don't want to count nulls
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by loc.LocationID
元の質問 -
SQLクエリの場合 -
select *
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by (loc.LocationID)
このエラーが発生する理由がわかりません。私がやりたいことは、テーブルを結合してから、特定の場所にいるすべての従業員をグループ化することです。
私は自分の質問について部分的な説明があると思います。大丈夫かどうかを教えてください -
同じ場所で働くすべての従業員をグループ化するには、まずLocationIDに言及する必要があります。
それで、私達はそれの隣に各従業員IDを言及することはできません/しません。むしろ、その場所にいる従業員の総数を言います。つまり、その場所にいる従業員をSUM()する必要があります。なぜ私たちはそれを後者のやり方でやるのか、私にはわかりません。したがって、これはエラーの「集約関数にも含まれていない」部分を説明しています。
エラーのGROUP BY
節部分の説明は何ですか?
次のテーブルT
があるとします。
a b
--------
1 abc
1 def
1 ghi
2 jkl
2 mno
2 pqr
そして私は次のような問い合わせをします。
SELECT a, b
FROM T
GROUP BY a
出力には2行あります。1行はa=1
、2行目はa=2
です。
しかし、 b の値は、これら2つの各行に何を表示する必要がありますか?それぞれの場合に3つの可能性があります、そして、問い合わせの中で何も各グループのbのためにどの値を選ぶべきかをはっきりさせません。あいまいです。
これは、 単一値ルール を示しています。これは、GROUP BY照会を実行したときに得られる未定義の結果を禁止し、選択リストにグループ化基準に含まれず集約にも含まれない列を含みます。関数(SUM、MIN、MAXなど).
これを修正すると、次のようになります。
SELECT a, MAX(b) AS x
FROM T
GROUP BY a
今、あなたは以下の結果が欲しいことは明らかです:
a x
--------
1 ghi
2 pqr
ONLY_FULL_GROUP_BY
サーバーモードを無効に設定すると( 、デフォルトでは )、クエリはMYSQL
で機能します。しかし、この場合は、異なるRDBMSを使用しています。クエリを機能させるために、すべての非集計列を追加 _をGROUP BY
句に追加します。
SELECT col1, col2, SUM(col3) totalSUM
FROM tableName
GROUP BY col1, col2
非集約列は、その列がSUM
、MAX
、COUNT
などの集約関数に渡されないことを意味します。
「私がしたいのは、テーブルを結合してから、特定の場所にいるすべての従業員をグループにまとめることだけです。」
SQLステートメントの出力に会社の全従業員をリストし、最初にアナハイムのオフィスのすべての人、次にバッファローのオフィスの人、次にクリーブランドのオフィスの人のリストを表示するのが望ましいと思います(A、 B、C、それを取得し、明らかに私はあなたが持っている場所がわからない)。
その場合は、GROUP BYステートメントを失います。必要なのはORDER BY loc.LocationID
だけです
基本的に、このエラーが言っているのは、GROUP BY
句を使用する場合、結果は各グループに1行のリレーション/テーブルになるため、SELECT
ステートメントでは列を "選択"できるだけです。他の列は結果の表に表示されないため、その列でグループ化して集計関数を使用していることに注意してください。