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)
问题在于,distinct 作用于整个返回集,而不仅仅是第一个字段。否则MySQL将不知道要返回什么记录。因此,您需要某种关于评级的组函数,无论是 MAX、MIN、GROUP_CONCAT、AVG 还是其他几个函数。
迈克尔已经发布了一个很好的答案,所以我不会重新编写查询。
归档时间: |
|
查看次数: |
48260 次 |
最近记录: |