如何编写正确的 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
进行聚合,以防两个或更多用户可能具有相同的名称。
这就是我的数据库设计。
我需要使用 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
进行聚合,以防两个或更多用户可能具有相同的名称。