添加导致 GROUP BY 错误的聚合列

Posted

技术标签:

【中文标题】添加导致 GROUP BY 错误的聚合列【英文标题】:Adding an aggregate column causing GROUP BY error 【发布时间】:2018-09-19 16:00:31 【问题描述】:

我正在向我的查询添加一个聚合列 min(finumber)。添加此号码后,我希望能够在ORDER BY 中使用它。当我删除 min(finumber) 时,查询工作正常。当我添加 min(finumber) 时,它给了我错误:

列 'soitem.fsono' 在选择列表中无效,因为它不是 包含在聚合函数或 GROUP BY 子句中。

我的问题是:我如何添加min(finumber) 并将其用于ORDER BY 我的数据?

SELECT A.fsono,
       MAX(A.Attention) AS Attention,
       MAX(A.Address1) AS Address1,
       MAX(A.Address2) AS Address2,
       A.fcustno,
       A.fcontact,
       A.min_fin

FROM (SELECT soitem.fsono,
             somast.fcustno,
             somast.fcontact,
               min(finumber)as min_fin, 
             CASE
                  WHEN (CONVERT(varchar(MAX), soship.fmstreet)) LIKE 'ATTN%' THEN LEFT(CONVERT(varchar(MAX), soship.fmstreet), CHARINDEX(CHAR(10), CONVERT(varchar(MAX), soship.fmstreet)))
                  ELSE NULL
             END AS Attention,
             CASE WHEN [id] = 2 THEN S.val ELSE NULL END AS Address1,
             CASE WHEN [id] = 3 THEN S.val ELSE NULL END AS Address2
      FROM soitem
           INNER JOIN somast ON soitem.fsono = somast.fsono
           LEFT OUTER JOIN soship ON somast.fsono = soship.fcsono
                                 AND soship.fcenumber = ''
           CROSS APPLY [dbo].[split3](soship.fmstreet, CHAR(13) + CHAR(10)) S
      WHERE (somast.fstatus <> 'Cancelled')
        AND (somast.fsocoord = 'IFP'
          OR somast.fsocoord = '711')
        AND somast.fsono >= '034023') A
GROUP BY A.fsono,
         A.fcustno,
         A.fcontact
 Order by A.fsono, A.min_fin
  ;

【问题讨论】:

我在该查询中的任何地方都看不到min(finumber)?发布导致错误的 SQL,而不是错误的 SQL。 【参考方案1】:

错误在这里告诉你问题。

min(finumber) 在您的子查询中,而不是您的主查询中。您的子查询没有GROUP BY,因此出现错误。您需要使用OVER 子句。但是,这是伪 SQL:

MIN(finumber) OVER (PARTITION BY Partition Columns) AS min_fin

我猜这些列应该是soitem.fsono, somast.fcustno, somast.fcontact

【讨论】:

以上是关于添加导致 GROUP BY 错误的聚合列的主要内容,如果未能解决你的问题,请参考以下文章

在非聚合中使用聚合结果导致 GROUP BY 出现问题

列“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”]]

Postgresql 错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用

GroupingError:错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用

在 SQL 中使用 Group By 和 Aggregate - 获取错误“选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 中”

仅休眠错误:“列必须出现在 GROUP BY 子句中或在聚合函数中使用”