选择不同的列以及MySQL中的其他列

use*_*814 29 mysql select distinct

我似乎无法为以下(可能是一个古老的)问题找到合适的解决方案,所以希望有人可以解决一些问题.我需要在mySQL中返回1个不同的列以及其他非不同列.

我在mySQL中有以下表:

id      name       destination     rating     country
----------------------------------------------------
1       James      Barbados        5          WI
2       Andrew     Antigua         6          WI
3       James      Barbados        3          WI
4       Declan     Trinidad        2          WI
5       Steve      Barbados        4          WI
6       Declan     Trinidad        3          WI
Run Code Online (Sandbox Code Playgroud)

我希望SQL语句返回DISTINCT名称以及目的地,基于国家/地区的评级.

id      name       destination     rating     country
----------------------------------------------------
1       James      Barbados        5          WI
2       Andrew     Antigua         6          WI
4       Declan     Trinidad        2          WI
5       Steve      Barbados        4          WI
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,詹姆斯和德克兰有不同的评级,但名称相同,所以他们只返回一次.

以下查询返回所有行,因为评级不同.无论如何我可以返回上面的结果集吗?

SELECT (distinct name), destination, rating 
  FROM table 
 WHERE country = 'WI' 
 ORDER BY id
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 25

使用子查询,您可以获得id每个名称的最高值,然后根据以下内容选择其余行:

SELECT * FROM table
WHERE id IN (
  SELECT MAX(id) FROM table GROUP BY name
)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以使用MIN(id)获取每个名称的第一条记录而不是最后一条记录.

它也可以通过INNER JOIN反对子查询来完成.为此,性能应该类似,有时您需要从子查询中连接列.

SELECT
  table.*
FROM 
  table
  INNER JOIN (
    SELECT MAX(id) AS id FROM table GROUP BY name
  ) maxid ON table.id = maxid.id
Run Code Online (Sandbox Code Playgroud)


Bri*_*ver 5

问题在于,distinct 作用于整个返回集,而不仅仅是第一个字段。否则MySQL将不知道要返回什么记录。因此,您需要某种关于评级的组函数,无论是 MAX、MIN、GROUP_CONCAT、AVG 还是其他几个函数。

迈克尔已经发布了一个很好的答案,所以我不会重新编写查询。