SQL选择唯一条目

时间:2012-06-27 05:57:15

标签: mysql

我在桌子上:

ID Name   Age
1  James  15
2  James  16
3  Joseph 16
4  Joseph 18
5  Steve  4

我想回来:

5 Steve 4
1 James 15
3 Joseph 16

即。基于名称行的唯一条目(当有多个相同名称时选择ID最低的条目),并按年龄排序

正确的SQL语句是什么?

我有:

Select * FROM table Where True GROUP BY Name ORDER BY Age

它似乎返回了许多独特的结果,但它太慢了(表格有> 250,000个条目,处理的时间大约需要30秒),我想知道是否有更快的方法来执行此操作?

3 个答案:

答案 0 :(得分:0)

试试这个

  

SELECT *
    从表     WHERE ID in(SELECT MIN(ID)FROM table group by name)
    按年龄订购

您只需按名称对数据集进行分组并获取MIN(ID)并将其用作选择的“where”条件

答案 1 :(得分:0)

另一种查询方法,通常在需要性能的地方更好,只要你有Name上的INDEX(这不是一个选项):

SELECT *
FROM your_table t1
LEFT JOIN your_table t2 ON t1.Name = t2.Name AND t2.ID < t1.ID
WHERE t2.ID IS NULL;

快速explanation here

答案 2 :(得分:0)

由于您要根据最小ID进行选择,这是一个唯一字段,您只需先获得每个名称的最小ID个,然后加入ID个到主表。这将比使用WHERE中的子查询要快得多,因为最小值的子选择只执行一次,而子查询将对主表中的每一行执行(250,000次以上!)。

SELECT
    b.*
FROM
    (
        SELECT MIN(ID) AS minID
        FROM tbl
        GROUP BY Name
    ) a
INNER JOIN
    tbl b ON a.minID = b.ID
ORDER BY
    b.Age