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;
你能告诉我这个查询有什么问题吗?
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;