sql - 集計関数 - 各 group by 式 に は 外部 参照 では ない 列 が 少なくとも 1 列 含ま れ て いる 必要 が あります




列の理由は、集計関数またはGROUP BY句に含まれていないため、選択リストで無効です。 (3)

可能な重複:
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)

なぜこのエラーが出るのか分かりません。 私がしたいのは、テーブルに参加して特定の場所のすべての従業員をまとめてグループ化することだけです。

私は自分自身の質問について部分的に説明していると思います。 そのok -

同じ場所で働くすべての従業員をグループ化するには、最初にLocationIDを挙げる必要があります。

次に、従業員IDの横には各従業員IDは記載できません。 むしろ、その場所にいる従業員の総数について言及します。つまり、その場所で働く従業員をSUM()する必要があります。 なぜ私たちは後者の方法でそれをやっているのですか、わかりません。 したがって、これは、エラーの「集計関数」に含まれていないことを説明しています。

エラーのGROUP BY句の部分の説明は何ですか?


「私がしたいのは、テーブルに参加して特定の場所のすべての従業員をまとめてグループ化することだけです」

あなたが望むものは、会社内のすべての従業員をリストするSQL文の出力ですが、最初にアナハイム事務所のすべての人々、そしてBuffalo事務所の人々、そしてクリーブランド事務所(A、 B、C、それを得る、明らかに私はあなたが持っている場所を知らない)。

その場合は、GROUP BY文を失います。 必要なのは、 ORDER BY loc.LocationID


ONLY_FULL_GROUP_BYサーバーモードを無効にするように設定すると、クエリはMYSQL動作します( 既定ではこれがデフォルトです )。 しかし、この場合、異なるRDBMSを使用しています。 したがって、クエリを機能させるには、 集計されていないすべての列GROUP BY句に追加します。

SELECT col1, col2, SUM(col3) totalSUM
FROM tableName
GROUP BY col1, col2

集計されていない列は、列がSUMMAXCOUNTなどの集計関数に渡されないことを意味します。


次の表T仮定します。

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

私は次のクエリを実行します:

SELECT a, b
FROM T
GROUP BY a

出力には、 a=1場合a=1 1行、 a=1 2の場合は2行目の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




aggregate-functions