SQL 'with' 和 'group by' 子句

SQL 'with' and 'group by' clauses

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

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 中 运行 它时,我将收到以下错误:

Column 'myFriends.memberSubjectEq4' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

对列执行聚合函数后,必须将其余列包含在分组依据中

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;

您可以将计算移至 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;