mysql - 将查询结果中的 id 外键替换为用户名

标签 mysql sql database postgresql

我有这个有效的查询:

SELECT id, SUM(points) AS points
FROM leaderboard 
WHERE roundtime BETWEEN LOCALTIMESTAMP - INTERVAL '24 hours' AND LOCALTIMESTAMP
GROUP BY id ORDER BY points DESC LIMIT 25

它可能返回这样的东西:

id    points
------------
15    430
17    278
16    92

但是,我不想在结果中包含 id,而是想将其替换为与 id 对应的用户名(来自 users 表)

用户表:

id   username
-------------
15   Frank
16   Joe
17   Andy

这样第一个查询的结果是:

username  points
----------------
Frank     430
Andy      278
Joe       92

我尝试使用子查询,但无法完全正常工作,而且它变得越来越乱。有什么好的方法吗?

最佳答案

你只需要一个 Plain JOIN 来做你需要的。不要使用子查询,它会使你的 SQL 比它需要的慢:

SELECT u.username, SUM(l.points) AS points
  FROM leaderboard l
        INNER JOIN yourUserTable u
                ON l.id = u.ColumnNameForTheUserId
 WHERE roundtime BETWEEN LOCALTIMESTAMP - INTERVAL '24 hours' 
                     AND LOCALTIMESTAMP
 GROUP BY u.username 
 ORDER BY points DESC 
 LIMIT 25

关于mysql - 将查询结果中的 id 外键替换为用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506157/

相关文章:

sql - 如何选择每个类别中价格最高的产品?

mysql - 是否可以使用 SELECT * from TableName 显示文本而不是 ID

sql - 如何构造这个查询? (按 COUNT() 排序并加入用户表)

php - 如何计算mysql中符合条件的列数?

r - 无法使用 RSQLite 连接到数据库

mysql - mysql性能的最佳解决方案?

MySQL 查询我被难住了

mysql 连接四个表并获取超过 1 个月的记录

php - 如何使用 createCommand 在 yii2 中获取最后插入的 id?

java - 如果值不在 ENUM 中,则更改插入值