如何在加入时使用DISTINCT?

时间:2016-03-26 18:47:16

标签: mysql sql mariadb

我有两张桌子:
users
users

playertimesplayertimes

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

我有一个查询,它应该在结果集中返回以下结果:

  1. name - 使用JOINauth
  2. 进行检索
  3. time
  4. style
  5. 这是我目前的查询:
    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;

    以下是我在上述查询中得到的结果:
    current query result

    目前,该表格只能包含两个style 01的可能值。我正在寻找的是让style成为DISTINCT,所以在我的情况下,我只想获得2个结果(每个值为style一行)上面,它应该如下面的截图:

    ideal resultset

    我想得到帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

看起来您希望style的{​​{1}}行具有最小style值的time

你就是这样。它需要两个步骤。第一个确定每个值的最小时间

          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表格,将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'