【问题标题】:Make SELECT subquery COUNT the total subscribers of a subscriber使 SELECT 子查询 COUNT 成为订阅者的总订阅者
【发布时间】:2021-12-30 20:09:42
【问题描述】:

我试图创建一个计算订阅者总数的查询。目前看起来是这样的:

await this.queryInstance.query(
'SELECT all_users_subbed_to.* , (SELECT COUNT(??????)) AS subscribers_sub_count
FROM 
 (SELECT publisher_id, subscriber_id, u2.username 
 AS username, u2.user_photo AS user_photo 
 FROM subscribers s 
 INNER JOIN users u 
 ON (u.id = s.subscriber_id) 
 INNER JOIN users u2 ON (u2.id = s.publisher_id) 
 WHERE subscriber_id = ($1) 
 LIMIT 20 
 OFFSET ($2)) 
AS all_users_subbed_to;'
,
 [currentUserId = 80, offset]   
 );

FROM CLAUSE AKA all_users_subbed_to 工作正常,并显示当前用户拥有的所有订阅者。数据返回如下:

"subscribedToCurrentUser": [
        {
            "publisher_id": 84,
            "subscriber_id": 80,
            "username": "supercoookie",
            "user_photo": "profile-pic-for-supercoookie.jpeg"
        },
        {
            "publisher_id": 88,
            "subscriber_id": 80,
            "username": "GERPAL1",
            "user_photo": "profile-pic-for-GERPAL1.jpeg"
        }
    ]

我遇到的问题是获取这些订阅者列表的订阅者总数。我需要使用订阅者 publisher_id 即all_users_subbed_to.publisher_id 并从订阅者表中获取他们的订阅总数(使用 COUNT)。我想创建一个名为 have subscribers_sub_count 的新列,其中包含该总数。 有任何想法吗? 它应该是这样的:

"subscribedToCurrentUser": [
        {
            "publisher_id": 84,
            "subscriber_id": 80,
            "username": "supercoookie",
            "user_photo": "profile-pic-for-supercoookie.jpeg",
            "subscribers_sub_count": 3
        },
        {
            "publisher_id": 88,
            "subscriber_id": 80,
            "username": "GERPAL1",
            "user_photo": "profile-pic-for-GERPAL1.jpeg",
            "subscribers_sub_count": 70
        }
    ]

订阅者表如下所示:

【问题讨论】:

  • 请使用纯文本更新您的问题以提取订阅者表,并使用更完整的数据样本,以便了解如何在预期结果中获得"subscribers_sub_count": 3"subscribers_sub_count": 70
  • @Edouard "subscribers_sub_count": 3 和 "subscribers_sub_count": 70 只是示例数字。我想传达的是,它们应该是这些用户的总订阅数,并且它们应该根据数据而有所不同。很抱歉造成混乱。

标签: sql postgresql node-postgres


【解决方案1】:
await this.queryInstance.query(
'SELECT all_users_subbed_to.*, COUNT(all_users_subbed_to.id) AS subscribers_sub_count
FROM 
 (SELECT publisher_id, subscriber_id, u2.username 
 AS username, u2.user_photo AS user_photo 
 FROM subscribers s 
 INNER JOIN users u 
 ON (u.id = s.subscriber_id) 
 INNER JOIN users u2 ON (u2.id = s.publisher_id) 
 WHERE subscriber_id = ($1) 
 LIMIT 20 
 OFFSET ($2)) 
AS all_users_subbed_to;'
,
 [currentUserId = 80, offset]   
 );

【讨论】:

  • 感谢您的回答。它帮助我想到了解决方案。
  • 不客气,伙计。很高兴你明白了。
【解决方案2】:

修复它。它只需要一个使用来自 all_users_subbed_to 的数据的 WHERE 子句

await this.queryInstance.query(
'SELECT all_users_subbed_to.* , 
(SELECT COUNT(*) FROM subscribers s2 WHERE s2.publisher_id = all_users_subbed_to.publisher_id) AS subscribers_sub_count AS subscribers_sub_count
FROM 
 (SELECT publisher_id, subscriber_id, u2.username 
 AS username, u2.user_photo AS user_photo 
 FROM subscribers s 
 INNER JOIN users u 
 ON (u.id = s.subscriber_id) 
 INNER JOIN users u2 ON (u2.id = s.publisher_id) 
 WHERE subscriber_id = ($1) 
 LIMIT 20 
 OFFSET ($2)) 
AS all_users_subbed_to;'
,
 [currentUserId = 80, offset]   
 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多