代码之家  ›  专栏  ›  技术社区  ›  chovy

如何在sql中使用子选择选择计数?

  •  0
  • chovy  · 技术社区  · 2 年前

    我想计算一下内部连接的数量。我应该使用子选择吗?

    const users = db.queryEntries(
      "SELECT username, created_at, email, phone FROM users WHERE contactme = 1 ORDER BY created_at DESC"
    );
    

    还有一张桌子叫 searches 这有一个 user_id 属性我想获得在第一次查询中返回的每个用户的搜索次数。

    大概是这样的:

    SELECT count(*) as total
    FROM searches
    WHERE searches.user_id = user.id
    

    ...这样第一个查询将返回 total 对于每个用户

    2 回复  |  直到 2 年前
        1
  •  1
  •   D-Shih    2 年前

    如果我理解正确,你可以尝试使用 COUNT 具有 GROUP BY 在子查询中,然后执行 JOIN 按用户ID

    SELECT u.username, u.created_at, u.email, u.phone ,s.total
    FROM users u
    INNER JOIN (
        SELECT count(*) as total,user_id
        FROM searches 
        GROUP BY user_id
    ) s ON s.user_id = u.id
    WHERE u.contactme = 1 
    ORDER BY u.created_at DESC
    
        2
  •  0
  •   jkoch    2 年前

    这可以通过GROUPBY子句、COUNT和LEFT JOIN来完成。无需使用子选择。

    SELECT users.username, users.created_at, users.email, users.phone, COUNT(searches.user_id) AS total
    FROM users
    LEFT JOIN searches on users.id = searches.user_id
    GROUP BY users.id, users.username, users.created_at, users.email, users.phone