如何将 DISTINCT 与 JOIN 一起使用?

How can I use DISTINCT with a JOIN?

我有那两个 tables:
users:

playertimes

(我知道 jumpsstyle 应该是 int 而不是 varchar() 但这不是我要解决的问题)

我有一个查询,应该 return 结果集中的以下结果:

  1. name - 使用 JOINauth
  2. 检索
  3. time
  4. 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的两个可能值,即01。我正在寻找的是使 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'