2016-11-10 4 views
1

의 열에서 최소 값을 찾을 수 : 여전히 최소 값 id, name, value 만 사람이있는 새 테이블을 선택할 수있는 방법방법 SQL

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

. 내가 다시이 테이블이 필요 예에서

: 그,

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

다른 테이블에서 해당 행을 퍼팅에 대한 올바른 구문에 관해서는 : 그 값을 찾기

1 abc 1 
3 ghi 1 
+1

당신의 DBMS 무엇입니까? 'ROW_NUMBER'를 지원하면 간단합니다. – dnoeth

+0

@dnoeth postgresql을 사용하고 있습니다. – toastedDeli

+0

@ Lamak의 대답을 확인하십시오. 이것은 더 간단합니다. – dnoeth

답변

4

은 매우 간단합니다 사용중인 데이터베이스 엔진에 따라 다릅니다.

2

@ Lamak의 솔루션 대신 Windows 기능 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 등을 지정하여 min 또는 max 외부의 특정 등급을 얻을 수 있습니다. – 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