搜尋

首頁  >  問答  >  主體

列在選擇清單中無效的原因是它未包含在聚合函數或 GROUP BY 子句中

<p>我收到一個錯誤 - </p> <blockquote> <p>列「Employee.EmpID」在選擇清單中無效,因為它是 不包含在聚合函數或 GROUP BY 子句中。 </p> </blockquote> <hr /> <pre class="brush:php;toolbar:false;">select loc.LocationID, emp.EmpID from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by loc.LocationID</pre> <p>這種情況符合 Bill Karwin 給出的答案。 </p> <p>對上述內容的更正,適合 ExactaBox 的答案 - </p> <pre class="brush:php;toolbar:false;">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</pre> <hr /> <p><strong>原始問題 -</strong></p> <p>對於 SQL 查詢 -</p> <pre class="brush:php;toolbar:false;">select * from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by (loc.LocationID)</pre> <p>我不明白為什麼會出現此錯誤。我想要做的就是連接表,然後將特定位置的所有員工分組在一起。 </p> <p><strong>我想我對自己的問題有了部分解釋。告訴我是否可以 -</strong> </p> <p>要將在同一地點工作的所有員工分組,我們必須先提及 LocationID。 </p> <p>然後,我們不能/不提及旁邊的每個員工 ID。相反,我們提到該地點的員工總數,即我們應該對在該地點工作的員工進行 SUM()。我不確定為什麼我們要採取後一種方式。 因此,這解釋了錯誤的“它不包含在任一聚合函數中”部分。 </p> <p>錯誤的 <strong><code>GROUP BY</code></strong> 子句部分的解釋是什麼? </p>
P粉517090748P粉517090748468 天前661

全部回覆(2)我來回復

  • P粉155832941

    P粉1558329412023-08-24 13:38:21

    如果您設定停用 ONLY_FULL_GROUP_BY 伺服器模式(預設情況下),您的查詢將在 MYSQL 中執行。但在本例中,您使用的是不同的 RDBMS。因此,為了使您的查詢正常運作,請將所有非聚合列新增至您的GROUP BY子句中,例如

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

    非聚合列意味著該列不會傳遞到聚合函數,例如 SUMMAX#、COUNT 等。

    回覆
    0
  • P粉090087228

    P粉0900872282023-08-24 10:30:14

    假設我有下表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=2

    但是 b 的值應該在這兩行中顯示什麼呢?每種情況都有三種可能性,查詢中沒有任何內容明確說明為每組中的 b 選擇哪個值。意思很模糊。

    這示範了單值規則,該規則禁止在執行GROUP BY 查詢時獲得未定義的結果,並且在選擇清單中包含不屬於分組的任何列標準,也不會出現在聚合函數(SUM、MIN、MAX 等)中。

    修復它可能如下所示:

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

    現在很明顯您想要以下結果:

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

    回覆
    0
  • 取消回覆