搜索

首页  >  问答  >  正文

列在选择列表中无效的原因是它未包含在聚合函数或 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粉517090748528 天前700

全部回复(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

    非聚合列意味着该列不会传递到聚合函数,例如 SUMMAXCOUNT 等。

    回复
    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
  • 取消回复