我有这个查询有效:
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
我尝试使用子查询,但无法使其正常工作,而且它变得混乱。这样做有好办法吗?
答案 0 :(得分:1)
尝试将查询作为子查询。我将users表添加到您的查询中:
SELECT p.username, q.points from(
(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
) q
LEFT JOIN users_table p
ON p.id = q.id
以上是演示如何从您已构建的查询中提取所需信息。
我希望这有助于解释结合上述内容的此查询所发生的事情(这更简洁):
SELECT p.username, q.points
FROM leaderboard q
LEFT JOIN users_table p
ON p.id = q.id
WHERE roundtime BETWEEN LOCALTIMESTAMP - INTERVAL '24 hours' AND LOCALTIMESTAMP
GROUP BY id
ORDER BY points
DESC LIMIT 25
答案 1 :(得分:1)
你只需要一个普通的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