繁体   English   中英

SQL选择唯一实体

[英]SQL Select Unique Entires

我在桌上:

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秒的时间来处理),我想知道是否有更快的方法来做到这一点?

尝试这个

选择 *
FROM table WHERE ID(按名称选择SELECT MIN(ID)FROM table组)
按年龄排序

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

查询此内容的另一种方法,通常是在需要性能的地方,如果您在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;

这里有一个简短的解释

由于要基于最小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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM