SQL将重复的行报告为计数

Posted

技术标签:

【中文标题】SQL将重复的行报告为计数【英文标题】:SQL report duplicated rows into count into count 【发布时间】: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 个或更多文档,这会导致重复。 例如,在报告中我看到这样的行

    User1 文档A User2 文档A User2 文档B User2 文档C User3 文档A

等等

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

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

【问题讨论】:

【参考方案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 表,因为可能不匹配。

【讨论】:

谢谢!该解决方案按预期工作。我批准了你的解决方案

以上是关于SQL将重复的行报告为计数的主要内容,如果未能解决你的问题,请参考以下文章

SQL 累积不重复计数

SQL:如何获取计数值的 sum() [重复]

SQL - 计数 WHERE AGGREGATE>1 [重复]

将数据库中的计数作为变量返回到 PHP [重复]

MySQL 抛出“java.sql.SQLException:列计数与第 1 行的值计数不匹配”[重复]

Spark SQL 的累积非重复计数