2016-11-10 35 views
1

如果我有一個表是這樣的:如何找到一列中的最小值在SQL

id name value 
1 abc  1 
2 def  4 
3 ghi  1 
4 jkl  2 

如何選擇仍然有id, name, value但只有與最小值的人一個新的表。

在這個例子中,我需要這個表背:

1 abc 1 
3 ghi 1 
+1

什麼是你的DBMS?如果它支持'ROW_NUMBER',那很簡單。 – dnoeth

+0

@dnoeth我正在使用postgresql – toastedDeli

+0

檢查@ Lamak的答案,這更簡單。 – dnoeth

回答

4

尋找那些價值是非常簡單的:

SELECT * 
FROM YourTable 
WHERE value = (SELECT MIN(Value) FROM YourTable); 

至於把這些行與另一個表中正確的語法,即將取決於您正在使用的數據庫引擎。

2

@ Lamak解決方案的替代方案可能是使用rank窗口函數。根據具體情況,可能相當更好地履行:

SELECT id, name, value 
FROM (SELECT id, name, value, RANK() OVER (ORDER BY value ASC) AS rk 
     FROM mytable) t 
WHERE rk = 1 
+1

我喜歡這個以及你可以指定一個特定的排名2,3,4等,以獲得最小或最大以外的特定排名。 – xQbert

+0

@xQbert這是更通用的解決方案,但提高了整個表的掃描和緩存。 – Abelisto

1

不知道到底,如果這是你想要做什麼,但我認爲這會工作:

--creating #temp1 to recreate your table/example 
    CREATE TABLE #TEMP1 
    (id  INT  NOT NULL PRIMARY KEY, 
    name CHAR(3) NOT NULL, 
    value INT  NOT NULL) 


    INSERT INTO #TEMP1 
    VALUES 
    (1,'abc',1), 
    (2,'def',4), 
    (3,'ghi',1), 
    (4,'jkl',2) 

    -verify correct 

    SELECT * FROM #temp1 

    --populate new table with min value from table 1 

    SELECT * 
    INTO #TEMP2 
    FROM #TEMP1 
    WHERE value = (SELECT MIN(value) 
        FROM #TEMP1) 

    SELECT * FROM #TEMP2 
相關問題