列が選択リストで無効である理由は、集計関数またはGROUP BY句のいずれにも含まれていないためです[重複]質問する

列が選択リストで無効である理由は、集計関数または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 

この状況は、ビル・カーウィンの回答に当てはまります。

上記の訂正は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エラーの句部分の説明は何ですか?

ベストアンサー1

次のような表があるとしますT

a   b
--------
1   abc
1   def
1   ghi
2   jkl
2   mno
2   pqr

そして、次のクエリを実行します。

SELECT a, b
FROM T
GROUP BY a

出力には の行が 1 つとa=1の行が の行が2 つあるはずですa=2

しかし、これら 2 つの行のそれぞれでbの値には何が表示されるべきでしょうか? それぞれの場合で 3 つの可能性があり、クエリでは各グループで b にどの値を選択するかが明確に示されていません。あいまいです。

これは、 GROUP BY クエリを実行したときに未定義の結果が返されることを禁止する単一値ルールを示しています。選択リストには、グループ化基準の一部でも集計関数 (SUM、MIN、MAX など) にも含まれない列が含まれています。

修正すると次のようになります。

SELECT a, MAX(b) AS x
FROM T
GROUP BY a

ここで、次の結果が求められていることは明らかです。

a   x
--------
1   ghi
2   pqr

おすすめ記事