【问题标题】:Join two tables in SQLite and Count在 SQLite 和 Count 中连接两个表
【发布时间】:2014-12-08 01:17:02
【问题描述】:

我有两个名为“likes”和“cmets”的表,我想要一个表,其中包含每个特定用户的喜欢和 cmets 计数,我在 SQLite 中编写了以下查询,但结果并非对所有用户都是正确的,计数两个表中用户的值都是喜欢数和 cmet 数的倍数。

SELECT 
  likes.liker_name, likes.liker_id, likes.profile_picture , 
  COUNT(comments.commenter_name) AS comment_count, COUNT( likes.liker_id) AS like_count
FROM likes  
LEFT JOIN comments 
  ON likes.liker_name = comments.commenter_name 
GROUP BY 
  likes.liker_name 
ORDER BY 
  COUNT( likes.liker_id) DESC

如何获得两个表中都存在的用户的正确计数值?

【问题讨论】:

    标签: sqlite join count


    【解决方案1】:

    问题是:有些用户有 cmets 但没有喜欢,有些用户有喜欢但没有 cmets,有些人两者都有,有些人没有。因此,我建议使用联合查询并再次对其求和

    SELECT
        u.name, u.id, u.profile_picture,
        SUM(u.like_count) AS like_count, SUM(u.comment_count) AS comment_count
    FROM (
        SELECT
            liker_name AS name, liker_id AS id, profile_picture,
            COUNT(*) AS like_count, 0 AS comment_count
        FROM
            likes
        GROUP BY
            liker_name, liker_id, profile_picture
        UNION ALL
        SELECT
            commenter_name AS name, commenter_id AS id, profile_picture,
            0 AS like_count, COUNT(*) AS comment_count
        FROM
            comments
        GROUP BY
            commenter_name, commenter_id, profile_picture
    ) AS u
    GROUP BY
        u.name, u.id, u.profile_picture
    

    如果您有一个单独的用户表,您还可以将喜欢计数和 cmets 计数子查询加入用户表

    SELECT
        u.name, u.id, u.profile_picture, l.cnt AS like_count, c.cnt AS comment_count
    FROM
        users u
        LEFT JOIN
            (SELECT liker_id, COUNT(*) AS cnt
            FROM likes
            GROUP BY liker_id
            ) AS l
            ON u.user_id = l.liker_id
        LEFT JOIN
            (SELECT commenter_id, COUNT(*) AS cnt
            FROM comments
            GROUP BY commenter_id
            ) AS c
            ON u.user_id = c.commenter_id
    WHERE l.cnt > 0 OR c.cnt > 0
    

    不管你怎么做,你必须在单独的子查询中计算 cmets 和 likes。如果您在加入后进行计数,您正在对可能重复记录的结果(左侧的记录)求和,并且您得到错误的计数。

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2021-11-08
      • 2020-04-04
      • 2017-04-24
      • 2023-03-18
      相关资源
      最近更新 更多