列が選択リストで無効になる理由は、その列が集計関数または GROUP BY 句に含まれていないためです。
P粉517090748
2023-08-23 14:36:31
<p>エラーを受け取りました - </p>
<ブロック引用>
<p>列 'Employee.EmpID' は選択リストでは無効です。
集計関数や GROUP BY 句には含まれません。 </p>
</blockquote>
<pre class="brush:php;toolbar:false;">loc.LocationID、emp.EmpID を選択
従業員から emp として完全に参加 場所を loc として
emp.LocationID = loc.LocationID 上
loc.LocationID</pre> でグループ化します。
<p>この状況は、Bill Karwin の答えと一致します。 </p>
<p>上記の修正、ExactaBox に適した回答 - </p>
<pre class="brush:php;toolbar:false;">select loc.LocationID, count(emp.EmpID) -- count(*) ではなく、null をカウントしたくない
従業員から emp として完全に参加 場所を loc として
emp.LocationID = loc.LocationID 上
loc.LocationID</pre> でグループ化します。
<p><strong>元の質問 -</strong></p>
<p>SQL クエリの場合 -</p>
<pre class="brush:php;toolbar:false;">select *
従業員から emp として完全に参加 場所を loc として
emp.LocationID = loc.LocationID 上
(loc.LocationID)</pre> でグループ化
<p>なぜこのエラーが発生するのかわかりません。私がやりたいのは、テーブルを結合して、特定の場所にいるすべての従業員をグループ化することだけです。 </p>
<p><strong>問題の一部は説明できたと思います。できれば教えてください -</strong> </p>
<p>同じ場所で働いているすべての従業員をグループ化するには、最初に LocationID を指定する必要があります。 </p>
<p>その場合、各従業員 ID の隣に言及することはできません/言及しません。代わりに、その場所の従業員の総数について言及します。つまり、その場所で働いている従業員を SUM() する必要があります。なぜ後者の方法を取るのかはわかりません。
これで、エラーの「どちらの集計関数にも含まれていない」部分が説明されます。 </p>
<p>間違った <strong><code>GROUP BY</code></strong> 句部分の説明は何ですか? </p>
ONLY_FULL_GROUP_BY
サーバー モードを無効に設定すると (デフォルトでは )、クエリはMYSQL
で実行されます。ただし、この場合は別の RDBMS を使用しています。したがって、クエリを機能させるには、 のように、すべての非集計列 をGROUP BY
句に追加します。 リーリーSUM
、
MAX、
COUNTなどの集計関数に渡されないことを意味します。
次のテーブルがあるとします
リーリーT
:次のクエリを実行します:
リーリー出力には 2 行があり、1 行目は
a=1
で、2 行目はa=2
です。しかし、b の値はこれら 2 行に何を表示すればよいでしょうか?それぞれの場合に 3 つの可能性があり、クエリには各グループの b にどの値を選択するかを明確にするものはありません。意味は非常に曖昧です。
これは、GROUP BY クエリを実行し、グループ化の一部ではなく集計関数に表示されない列条件を選択リストに含めるときに、未定義の結果を取得することを禁止する 単一値ルール を示しています。 (合計、最小、最大など)。
これを修正すると次のようになります:
リーリーこれで、次の結果が必要であることは明らかです:
リーリー