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

时间:2013-05-22 18:54:15

标签: 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

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

SELECT DISTINCT (position) AS p, (SELECT MAX(values) AS v FROM MYTABLE  WHERE position = p) FROM MYTABLE;

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

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

感谢任何帮助。 欢呼声。,

3 个答案:

答案 0 :(得分:6)

使用GroupBy-Clause:

SELECT Position, MAX(VALUES) FROM TableName
GROUP BY Position

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

答案 1 :(得分:1)

尝试使用GROUP BY子句:

SELECT position AS p, MAX(values) AS v
FROM MYTABLE
GROUP BY p;

答案 2 :(得分:1)

试试这个

 SELECT position AS p, MAX(`values`) AS v FROM MYTABLE 
 GROUP BY position 

DEMO HERE

输出:

    P | V
    1 | 2
    2 | 22