【问题标题】:SQL report duplicated rows into count into countSQL将重复的行报告为计数
【发布时间】:2018-11-06 11:43:14
【问题描述】:

首先让我告诉你,我没有任何 SQL 经验,但是我最近改变了职位,考虑到这种情况,我运行一些脚本然后单独检查应用程序中的每条记录会更容易。这是场景:

我有两张桌子: 用户 具有用户 ID、用户名、电子邮件等.. 和 文档,包含 DocumentID 和 UserID、文档名称以及其他一些列。

我想创建一个报告,以帮助我检查用户是否将文档附加到他们的个人资料中。

我现在做的是

SELECT UsersTable.UserID, 
DocumentsTable.DocumentID, 
DocumentsTable.UserID
FROM UserTable 
LEFT JOIN DocumentTable ON UserTable.UserID = DocumentTable.UserID

我遇到的问题是,一些用户的个人资料中已经附加了 2 个或更多文档,这会导致重复。 例如,在报告中我看到这样的行

  1. User1 文档A
  2. User2 文档A
  3. User2 文档B
  4. User2 文档C
  5. User3 文档A

等等

有没有办法以某种方式将这些文档转换为基于 UserID 计数的值?所以我想看看

  1. 用户1 1
  2. 用户2 3
  3. 用户3 1

【问题讨论】:

    标签: sql


    【解决方案1】:

    您正在寻找GROUP BY。我建议将查询编写为:

    SELECT ut.UserID, COUNT(dt.UserID)
    FROM UserTable ut LEFT JOIN
         DocumentTable dt
         ON ut.UserID = dt.UserID
    GROUP BY ut.UserID
    ORDER BY ut.UserID;
    

    注意事项:

    • 表别名的使用使查询更易于编写和阅读。
    • ORDER BY 保证结果按用户 ID 排序。
    • COUNT() 基于 second 表,因为可能不匹配。

    【讨论】:

    • 谢谢!该解决方案按预期工作。我批准了你的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多