如何编写正确的 SQL 查询来查找最重复的用户?

How to write the correct SQL query to find the most duplicate user?

这就是我的数据库设计。

我需要使用 SQLite 找到拥有最多相册的人。 我试过这个:

SELECT USERS.NAME, COUNT(USERS.NAME) AS 'value_occurrence' FROM USERS
INNER JOIN ALBUMS
ON USERS.ID = ALBUMS.USER_ID 
GROUP BY USERS.NAME 
ORDER BY 'value_occurrence' 
DESC LIMIT 1;

但它没有用,给了我错误的结果。请帮我找到正确的方法。

代码基本上看起来没问题,但是当两个用户同名时会return 出乎意料的结果。这就是为什么我们有 ID 列!

尝试

SELECT USERS.NAME, COUNT(USERS.ID) AS 'value_occurrence' FROM USERS
INNER JOIN ALBUMS
ON USERS.ID = ALBUMS.USER_ID 
GROUP BY USERS.ID, USERS.NAME
ORDER BY 'value_occurrence' 
DESC LIMIT 1;

我们可以使用 group by Users.Id, Users.Name,因为每个 ID 将只有一个名称与之关联,因此它仍然只会为每个 ID 创建一个组。

逻辑是正确的,但您可能会因为错误地使用单引号作为别名而被绊倒。试试这个版本:

SELECT u.NAME, COUNT(u.NAME) AS value_occurrence
FROM USERS u
INNER JOIN ALBUMS a ON a.USER_ID = u.ID
GROUP BY u.NAME
ORDER BY value_occurrence DESC
LIMIT 1;

ORDER BY 'value_occurrence' 的问题是您告诉 SQLite 按常量值排序。也就是说,结果集中的 every 记录将具有相同的排序值,这基本上意味着 SQLite 可以自由选择 any 记录作为“第一个。”

注意:正如@Cazzym 的回答所述,您应该按用户 ID 进行聚合,以防两个或更多用户可能具有相同的名称。