如何将 DISTINCT 与 JOIN 一起使用?
How can I use DISTINCT with a JOIN?
我有那两个 tables:
users
:
和playertimes
:
(我知道 jumps
和 style
应该是 int
而不是 varchar()
但这不是我要解决的问题)
我有一个查询,应该 return 结果集中的以下结果:
name
- 使用 JOIN
和 auth
检索
time
style
这是我当前的查询:
SELECT p.style, p.time, u.name FROM playertimes p JOIN users u ON p.auth = u.auth WHERE p.map = 'bhop_good' ORDER BY p.time ASC;
这是我通过上面的查询得到的结果:
此时,table只能包含style
的两个可能值,即0
或1
。我正在寻找的是使 style
成为 DISTINCT
,所以在我的例子中,我只想为查询获得 2 个结果(每个 style
的值一行)上面,应该类似于以下屏幕截图:
我想得到帮助,谢谢!
您似乎想要 style
行中具有最小 time
值的 style
的每个不同值。
你是这样理解的。它需要两个步骤。第一个确定每个值的最小时间
SELECT style, MIN(time) time
FROM playertimes
GROUP BY style
第二步得到那个时间对应的实际playertimes
行。
SELECT p.style, s.time, p.auth
FROM playertimes p
JOIN (
SELECT style, MIN(time) time
FROM playertimes
GROUP BY style
) s ON p.style = s.style AND p.time = s.time
最后,您可以将该批次加入您的 users
table,将您的 auth
列变成 name
列。
SELECT p.style, s.time, u.name
FROM playertimes p
JOIN (
SELECT style, MIN(time) time
FROM playertimes
GROUP BY style
) s ON p.style = s.style AND p.time = s.time
JOIN users.u ON p.auth = u.auth
当然,一旦您有了一个有效的查询,您就可以向它添加一个 WHERE 子句,就像这个一样。
WHERE p.map = 'some constant'
我有那两个 tables:
users
:
和playertimes
:
(我知道 jumps
和 style
应该是 int
而不是 varchar()
但这不是我要解决的问题)
我有一个查询,应该 return 结果集中的以下结果:
name
- 使用JOIN
和auth
检索
time
style
这是我当前的查询:
SELECT p.style, p.time, u.name FROM playertimes p JOIN users u ON p.auth = u.auth WHERE p.map = 'bhop_good' ORDER BY p.time ASC;
这是我通过上面的查询得到的结果:
此时,table只能包含style
的两个可能值,即0
或1
。我正在寻找的是使 style
成为 DISTINCT
,所以在我的例子中,我只想为查询获得 2 个结果(每个 style
的值一行)上面,应该类似于以下屏幕截图:
我想得到帮助,谢谢!
您似乎想要 style
行中具有最小 time
值的 style
的每个不同值。
你是这样理解的。它需要两个步骤。第一个确定每个值的最小时间
SELECT style, MIN(time) time
FROM playertimes
GROUP BY style
第二步得到那个时间对应的实际playertimes
行。
SELECT p.style, s.time, p.auth
FROM playertimes p
JOIN (
SELECT style, MIN(time) time
FROM playertimes
GROUP BY style
) s ON p.style = s.style AND p.time = s.time
最后,您可以将该批次加入您的 users
table,将您的 auth
列变成 name
列。
SELECT p.style, s.time, u.name
FROM playertimes p
JOIN (
SELECT style, MIN(time) time
FROM playertimes
GROUP BY style
) s ON p.style = s.style AND p.time = s.time
JOIN users.u ON p.auth = u.auth
当然,一旦您有了一个有效的查询,您就可以向它添加一个 WHERE 子句,就像这个一样。
WHERE p.map = 'some constant'