SQL GROUP BY 句の「選択リストの列が無効です」エラーを修正する
GROUP BY
を使用したデータベース クエリでは、SELECT
リストを慎重に検討する必要があります。 選択したすべての列は、(COUNT
、SUM
、MIN
、MAX
などの関数を使用して) 集約されるか、明示的に GROUP BY
句に含まれる必要があります。 このルールに従わない場合、「集計関数または GROUP BY 句のいずれにも含まれていないため、選択リストの列は無効です」というエラーが発生します。
このエラーは、SELECT
リストに集計されていない列も GROUP BY
グループ化の一部でもない列が含まれている場合に発生します。
解決策には、SELECT
リストまたは GROUP BY
句のいずれかを調整する必要があります。
例と解決策:
この問題のあるクエリを調べてみましょう:
<code class="language-sql">SELECT loc.LocationID, emp.EmpID FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID</code>
emp.EmpID
が集計されておらず、GROUP BY
句に含まれていないため、エラーが発生します。 これを修正するには 2 つの方法があります:
解決策 1: グループ化されていない列を集計する
<code class="language-sql">SELECT loc.LocationID, COUNT(emp.EmpID) AS EmployeeCount FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID</code>
この改訂されたクエリでは、各場所の従業員 (COUNT(emp.EmpID)
) がカウントされます。
解決策 2: GROUP BY 句に列を追加します
<code class="language-sql">SELECT loc.LocationID, emp.EmpID FROM Employee AS emp FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID GROUP BY loc.LocationID, emp.EmpID</code>
これにより、結果が LocationID
と EmpID
の両方でグループ化されます。 これにより、異なる LocationID
値を持つ重複した EmpID
エントリが削除されることに注意してください。 結果には、各従業員の所在地が個別に表示されます。
以上がSQL GROUP BY クエリの「選択リストの列が無効です」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。