【问题标题】:SQL 'with' and 'group by' clausesSQL 'with' 和 'group by' 子句
【发布时间】:2016-01-08 16:47:57
【问题描述】:

你能告诉我这个查询有什么问题吗?

with myFriends as (select objectAuthor,memberId,objectSubject,rating,memberSubjectEq4 from tblRating group by objectAuthor,memberId,objectSubject,rating,memberSubjectEq4)
select authorId,subjectId,(
    (
        select memberSubjectEq4*(sum(rating)+1) from myFriends where myFriends.objectAuthor=AAA.authorId and myFriends.objectSubject=AAA.subjectId
    )

) as XF from tblMC AAA group by authorId,subjectId;

当我在 MS SQL Server 2014 中运行它时,我会收到以下错误:

选择列表中的“myFriends.memberSubjectEq4”列无效 因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句。

【问题讨论】:

  • 错误的哪一方面你不明白?看起来很清楚。
  • @GordonLinoff 为什么我会收到错误消息?我想找到第 4 行中列的乘积。
  • @Siavash "memberSubjectEq4" 在您的 sum 函数之外。重组代数或查询,以免解决错误。
  • 你为什么要 SUM 评级,而不是 memberSubjectEq4?
  • 这里有很多关于这个错误的解释:stackoverflow.com/…

标签: sql sql-server group-by common-table-expression


【解决方案1】:

您可以将您的计算移到您的 CTE 中,然后左连接到 CTE 以获得 XF 金额。

WITH    myFriends AS 
(   SELECT  objectAuthor,
            objectSubject,
            memberSubjectEq4 * (SUM(rating) + 1) AS XF
    FROM    tblRating
    GROUP BY  objectAuthor,
            objectSubject,
            memberSubjectEq4
)
SELECT  authorId,
        subjectId,
        SUM(myFriends.XF) XF
FROM    tblMC AAA
        LEFT JOIN myFriends ON myFriends.objectAuthor = AAA.authorId
                                AND myFriends.objectSubject = AAA.subjectId
GROUP BY authorId,
        subjectId;

【讨论】:

    【解决方案2】:

    一旦对列执行聚合函数,您必须将其余列包含在 Group By 中

    with myFriends as (select objectAuthor,memberId,objectSubject,rating,memberSubjectEq4 from tblRating group by objectAuthor,memberId,objectSubject,rating,memberSubjectEq4)
    select authorId,subjectId,(
        (
            select memberSubjectEq4*(sum(rating)+1) from myFriends where myFriends.objectAuthor=AAA.authorId and myFriends.objectSubject=AAA.subjectId
            group by memberSubjectEq4
        )
    
    ) as XF from tblMC AAA group by authorId,subjectId;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 2020-10-26
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多