Sql 如何获得每个社交网站成员的平均喜欢度
所以我有3张桌子:Sql 如何获得每个社交网站成员的平均喜欢度,sql,oracle,average,Sql,Oracle,Average,所以我有3张桌子: Member ( memberId integer, name varchar(50) ) Photo ( memberId integer, photoId integer ) Like ( photoId integer, memberId integer ) 我需要为每个成员获取他所有照片中的平均喜欢度。 如果每张照片都至少有一个喜欢,我可以这样做,但是如果我添加了一张没有任何喜欢的照片,结果中不会包含它 谢谢你的帮助 编辑: 以下是我之
Member (
memberId integer,
name varchar(50)
)
Photo (
memberId integer,
photoId integer
)
Like (
photoId integer,
memberId integer
)
我需要为每个成员获取他所有照片中的平均喜欢度。如果每张照片都至少有一个喜欢,我可以这样做,但是如果我添加了一张没有任何喜欢的照片,结果中不会包含它 谢谢你的帮助 编辑: 以下是我之前为memberId 201701所做的
SELECT AVG(RCOUNT)
FROM
(
SELECT COUNT (*) AS RCOUNT
FROM LIKE
WHERE photoId IN
(
SELECT photoId
FROM PHOTO
WHERE memberId = 201701
)
GROUP BY photoId
);
您还可以使用finner子查询的联接(对于不带like的photo,使用left联接)
这应该可以通过表
LIKE
和PHOTO
SELECT AVG(RCOUNT) FROM (
SELECT COUNT (*) AS RCOUNT
FROM PHOTO as AS p
LEFT OUTER JOIN LIKE as l on p.photoId = l.photoId
WHERE p.memberId = 201701
GROUP BY p.photoId );
我想你问错问题了
SELECT AVG(RCOUNT) FROM (
SELECT COUNT (*) AS RCOUNT
FROM PHOTO as AS p
LEFT OUTER JOIN LIKE as l on p.photoId = l.photoId
WHERE p.memberId = 201701
GROUP BY p.photoId );
SELECT AVG(RCOUNT) FROM (
SELECT COUNT (*) AS RCOUNT
FROM PHOTO as AS p
WHERE p.memberId = 201701
GROUP BY p.photoId );
可以按如下方式进行转换:
SELECT AVG(RCOUNT) FROM (
SELECT COUNT (*) AS RCOUNT
FROM PHOTO as AS p
LEFT OUTER JOIN LIKE as l on p.photoId = l.photoId
WHERE p.memberId = 201701
GROUP BY p.photoId );
SELECT AVG(RCOUNT) FROM (
SELECT COUNT (*) AS RCOUNT
FROM PHOTO as AS p
WHERE p.memberId = 201701
GROUP BY p.photoId );
这两个查询返回完全相同的结果,因为第一个查询使用外部联接。请发布您尝试使用的查询。我在帖子中添加了它谢谢您的帮助!