Sql 如何获得每个社交网站成员的平均喜欢度

Sql 如何获得每个社交网站成员的平均喜欢度,sql,oracle,average,Sql,Oracle,Average,所以我有3张桌子: Member ( memberId integer, name varchar(50) ) Photo ( memberId integer, photoId integer ) Like ( photoId integer, memberId integer ) 我需要为每个成员获取他所有照片中的平均喜欢度。 如果每张照片都至少有一个喜欢,我可以这样做,但是如果我添加了一张没有任何喜欢的照片,结果中不会包含它 谢谢你的帮助 编辑: 以下是我之

所以我有3张桌子:

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 );

我想你问错问题了

  • 若你们想得到Like表中照片数量的平均值,你们必须像以前一样只查询Like表

  • 若您想获得Like表中或不在Like表中的Photo计数的平均值,则不必查询Like表,因为Photo表具有包括Like表在内的所有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 );
    

    这两个查询返回完全相同的结果,因为第一个查询使用外部联接。

    请发布您尝试使用的查询。我在帖子中添加了它谢谢您的帮助!