簡體   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