SQL查询"太长" - 选择具有distinct和max

dma*_*nez 0 mysql sql

我有这个场景:

一个带有POSITION的表和一个与每个位置相关的值,但是我对同一个位置总是有4个值,所以我的表的一个例子是:

position | x| values 
1 | x1 | 0
1 | x2 | 1
1 | x3 | 1.4
1 | x4 | 2
2 | x1 | 3
2 | x2 | 10
2 | x3 | 12.4
2 | x4 | 22
Run Code Online (Sandbox Code Playgroud)

我需要一个查询,它返回每个唯一位置值的MAX值.现在,我正在查询它:

SELECT DISTINCT (position) AS p, (SELECT MAX(values) AS v FROM MYTABLE  WHERE position = p) FROM MYTABLE;
Run Code Online (Sandbox Code Playgroud)

我花了1651行(39.93秒),1651行只是对这个数据库的测试(它可能应该有超过1651行.

我究竟做错了什么 ?有没有更好的方法来更快地获得它?

任何帮助表示赞赏.干杯.,

Fab*_*ler 6

使用GroupBy-Clause:

SELECT Position, MAX(VALUES) FROM TableName
GROUP BY Position
Run Code Online (Sandbox Code Playgroud)

另外,看看文档(关于groupby):http: //dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

  • @FabianBigler...答案的时间戳是18:57:29.对于另外两个,它是18:58:48和18:58:12.你的回答是第一个;)你可以通过将鼠标悬停在"已回答的xx分钟前"线上来看到时间戳(Aaron Bertrand首先向我解释了这一点). (3认同)