복붙노트

[SQL] 두 번째로 큰 값을 찾을 수있는 간단한 SQL 쿼리는 무엇입니까?

SQL

두 번째로 큰 값을 찾을 수있는 간단한 SQL 쿼리는 무엇입니까?

특정 열에서 두 번째로 큰 정수 값을 찾을 수있는 간단한 SQL 쿼리는 무엇입니까?

열에서 중복 값은 아마이 있습니다.

해결법

  1. ==============================

    1.

    SELECT MAX( col )
      FROM table
     WHERE col < ( SELECT MAX( col )
                     FROM table )
    
  2. ==============================

    2.

    SELECT MAX(col) FROM table WHERE col NOT IN (SELECT MAX(col) FROM table);
    
  3. ==============================

    3.T-SQL에서 두 가지 방법이 있습니다 :

    T-SQL에서 두 가지 방법이 있습니다 :

    --filter out the max
    select max( col )
    from [table]
    where col < ( 
        select max( col )
        from [table] )
    
    --sort top two then bottom one
    select top 1 col 
    from (
        select top 2 col 
        from [table]
        order by col) topTwo
    order by col desc 
    

    마이크로 소프트 SQL에서 첫 번째 방법은 문제의 열이 클러스터 된 경우에도, 두 번째로 두 배 빠릅니다.

    정렬 작업이 비교적 느린 테이블 또는 인덱스 스캔이 최대 집계 사용에 비교되기 때문입니다.

    다른 방법으로, ROW_NUMBER () 함수를 사용할 수있는 Microsoft SQL 2005 이상 :

    select col
    from (
        select ROW_NUMBER() over (order by col asc) as 'rowNum', col
        from [table] ) withRowNum 
    where rowNum = 2
    
  4. ==============================

    4.당신이 필요로하는 데이터베이스를 명확히 할 수 있습니다, 그래서 나는 여기에 몇 가지 SQL 서버의 특정 일부 MySQL의 특정 솔루션 모두를 참조하십시오. 나는 이것이 MySQL은 사소한 때문에 나는 SQL 서버를 말하고 싶지만 추측이 있다면 비록.

    당신이 필요로하는 데이터베이스를 명확히 할 수 있습니다, 그래서 나는 여기에 몇 가지 SQL 서버의 특정 일부 MySQL의 특정 솔루션 모두를 참조하십시오. 나는 이것이 MySQL은 사소한 때문에 나는 SQL 서버를 말하고 싶지만 추측이 있다면 비록.

    나는 또한 그래서 당신이 동의하는 사람 조심, 그들은 계정에 중복의 가능성을 실패하지 작업 때문에 몇 가지 솔루션을 참조하십시오. 마지막으로, 나는 작동 할 몇 가지를 볼 수 있지만 그 테이블이 전체 스캔을 할 것입니다. 당신은 2 차 검사는이 개 값에서 찾고 있는지 확인하려면.

    SQL 서버 (사전-2012) :

    SELECT MIN([column]) AS [column]
    FROM (
        SELECT TOP 2 [column] 
        FROM [Table] 
        GROUP BY [column] 
        ORDER BY [column] DESC
    ) a
    

    MySQL은 :

    SELECT `column` 
    FROM `table` 
    GROUP BY `column` 
    ORDER BY `column` DESC 
    LIMIT 1,1
    

    최신 정보:

    SQL 서버 2012는 이제 훨씬 클리너 (표준) OFFSET / 구문을 FETCH를 지원합니다 :

    SELECT TOP 2 [column] 
    FROM [Table] 
    GROUP BY [column] 
    ORDER BY [column] DESC
    OFFSET 1 ROWS
    FETCH NEXT 1 ROWS ONLY;
    
  5. ==============================

    5.난 당신이 뭔가를 할 수 있다고 생각 :

    난 당신이 뭔가를 할 수 있다고 생각 :

    SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1
    

    또는

    SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)
    

    데이터베이스 서버에 따라 달라집니다. 힌트 : SQL 서버가 LIMIT하지 않습니다.

  6. ==============================

    6.당신은 다음과 같은 쿼리를 사용하여 열의 두 번째로 큰 값을 찾을 수 있습니다

    당신은 다음과 같은 쿼리를 사용하여 열의 두 번째로 큰 값을 찾을 수 있습니다

    SELECT *
    FROM TableName a
    WHERE
      2 = (SELECT count(DISTINCT(b.ColumnName))
           FROM TableName b WHERE
           a.ColumnName <= b.ColumnName);
    

    다음 링크에 대한 자세한 내용을 찾을 수 있습니다

    http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html

  7. ==============================

    7.가장 쉬운 응용 프로그램에서이 결과 집합에서 두 번째 값을 얻을 수있을 것입니다 :

    가장 쉬운 응용 프로그램에서이 결과 집합에서 두 번째 값을 얻을 수있을 것입니다 :

    SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2
    

    하지만 당신은 SQL을 사용하여 두 번째 값을 선택해야하는 경우, 방법에 대한 :

    SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t
    
  8. ==============================

    8.아주 간단한 쿼리는 두 번째로 큰 값을 찾을 수 있습니다

    아주 간단한 쿼리는 두 번째로 큰 값을 찾을 수 있습니다

    SELECT `Column` FROM `Table` ORDER BY `Column` DESC LIMIT 1,1;
    
  9. ==============================

    9.MSSQL

    MSSQL

    SELECT  *
      FROM [Users]
        order by UserId desc OFFSET 1 ROW 
    FETCH NEXT 1 ROW ONLY;
    

    MySQL의

    SELECT  *
      FROM Users
        order by UserId desc LIMIT 1 OFFSET 1
    

    서브 쿼리의 필요가 ... 하나 개의 행을 건너 뛸 수없고, 내림차순으로 주문 후 두 번째 행을 선택

  10. ==============================

    10.

    SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
    

    하지 전체 테이블에서 최대 급여를 포함 -이 쿼리 결과에서, 최대 급여를 반환합니다.

  11. ==============================

    11.오래된 질문은 나도 알아,하지만 나에게 더 나은 간부 계획을했다 :

    오래된 질문은 나도 알아,하지만 나에게 더 나은 간부 계획을했다 :

     SELECT TOP 1 LEAD(MAX (column)) OVER (ORDER BY column desc)
     FROM TABLE 
     GROUP BY column
    
  12. ==============================

    12.이것은 당신이 시도 할 수 있습니다, 아주 간단한 코드입니다 : -

    이것은 당신이 시도 할 수 있습니다, 아주 간단한 코드입니다 : -

    예 : 테이블 이름 = 시험

    salary 
    
    1000
    1500
    1450
    7500
    

    MSSQL 코드는 2 번째로 큰 값을 얻을 수

    select salary from test order by salary desc offset 1 rows fetch next 1 rows only;
    

    여기 수단 테이블의 2 행을 '1 행 오프셋'을하고 만 표시하는 1 행입니다 '에만 다음 1 개 행을 가져 오기'. 당신이 사용을 해달라고하면 다음이 두 번째 행에서 모든 행을 보여줍니다 '1 행은 옆에 가져 오기'.

  13. ==============================

    13.

    
    select * from (select ROW_NUMBER() over (Order by Col_x desc) as Row, Col_1
        from table_1)as table_new tn inner join table_1 t1
        on tn.col_1 = t1.col_1
    where row = 2
    

    모든 행의 값을 얻기 위해이 도움말을 희망 .....

  14. ==============================

    14.모두의 간단한

    모두의 간단한

    select sal from salary order by sal desc limit 1 offset 1
    
  15. ==============================

    15.

    select min(sal) from emp where sal in 
        (select TOP 2 (sal) from emp order by sal desc)
    

    노트

    살은 COL 이름입니다 EMP 테이블의 이름입니다

  16. ==============================

    16.톰은 하나 개의 값은 [TABLE_NAME] 섹션에서 선택 최대 ([COLUMN_NAME])에 반환보다 더있을 때이 실패 할 것으로 판단된다. 즉, 데이터 세트에서 2 개 이상의 값이 어디에.

    톰은 하나 개의 값은 [TABLE_NAME] 섹션에서 선택 최대 ([COLUMN_NAME])에 반환보다 더있을 때이 실패 할 것으로 판단된다. 즉, 데이터 세트에서 2 개 이상의 값이 어디에.

    귀하의 질의에 약간의 수정이 작동합니다 -

    select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] **IN** 
      ( select max([COLUMN_NAME]) from [TABLE_NAME] )
    
  17. ==============================

    17.

    select max(COL_NAME) from TABLE_NAME where COL_NAME in 
        (select COL_NAME from TABLE_NAME where COL_NAME < (select max(COL_NAME) from TABLE_NAME));
    

    하위 쿼리는 가장 큰 이외의 모든 값을 반환합니다. 반환 된 목록에서 최대 값을 선택합니다.

  18. ==============================

    18.

    select col_name
    from (
        select dense_rank() over (order by col_name desc) as 'rank', col_name
        from table_name ) withrank 
    where rank = 2
    
  19. ==============================

    19.

    SELECT 
        * 
    FROM 
        table 
    WHERE 
        column < (SELECT max(columnq) FROM table) 
    ORDER BY 
        column DESC LIMIT 1
    
  20. ==============================

    20.그것은 가장 쉬운 방법입니다 :

    그것은 가장 쉬운 방법입니다 :

    SELECT
          Column name
    FROM
          Table name 
    ORDER BY 
          Column name DESC
    LIMIT 1,1
    
  21. ==============================

    21.

    select age from student group by id having age<(select max(age) from student)order by age limit 1
    
  22. ==============================

    22.중복 값을 언급 한 바와 같이. 이 경우에서는 두 번째로 높은 값을 찾아 DISTINCT와 GROUP BY를 사용할 수있다

    중복 값을 언급 한 바와 같이. 이 경우에서는 두 번째로 높은 값을 찾아 DISTINCT와 GROUP BY를 사용할 수있다

    다음 표는

    :

    SELECT  amount FROM  salary 
    GROUP by amount
    ORDER BY  amount DESC 
    LIMIT 1 , 1
    
    SELECT DISTINCT amount
    FROM  salary 
    ORDER BY  amount DESC 
    LIMIT 1 , 1
    

    LIMIT의 제 1 부분 = 시작 인덱스

    LIMIT의 제 2 부분 = 얼마나 많은 값

  23. ==============================

    23.

    SELECT MAX(sal) FROM emp
    WHERE sal NOT IN (SELECT top 3 sal FROM emp order by sal desc )
    

    이 EMP 테이블의 세 번째로 높은 샐를 반환합니다

  24. ==============================

    24.

    select max(column_name) from table_name
    where column_name not in (select max(column_name) from table_name);
    

    하지에서 COLUMN_NAME의 가장 높은 값을 제외하는 조건이다.

    참조 : 프로그래머 인터뷰

  25. ==============================

    25.이 같은? 나는하지만, 그것을 테스트하지 않았습니다 :

    이 같은? 나는하지만, 그것을 테스트하지 않았습니다 :

    select top 1 x
    from (
      select top 2 distinct x 
      from y 
      order by x desc
    ) z
    order by x
    
  26. ==============================

    26.SQL 데이터베이스 테이블에서 n 번째 행을 선택하는 방법을 참조하십시오?

    SQL 데이터베이스 테이블에서 n 번째 행을 선택하는 방법을 참조하십시오?

    사이베이스의 SQL Anywhere를 지원 :

    SELECT TOP 1 START AT 2 value from table ORDER BY value
    
  27. ==============================

    27.상관 쿼리를 사용 :

    상관 쿼리를 사용 :

    Select * from x x1 where 1 = (select count(*) from x where x1.a < a)
    
  28. ==============================

    28.

    select * from emp e where 3>=(select count(distinct salary)
        from emp where s.salary<=salary)
    

    이 쿼리는 최대 세 급여를 선택합니다. 이 EMP가 동일한 급여를받을 경우이 쿼리에 영향을주지 않습니다.

  29. ==============================

    29.

    select top 1 MyIntColumn from MyTable
    where
     MyIntColumn <> (select top 1 MyIntColumn from MyTable order by MyIntColumn desc)
    order by MyIntColumn desc
    
  30. ==============================

    30.MS SQL에서이 작품 :

    MS SQL에서이 작품 :

    select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] < 
     ( select max([COLUMN_NAME]) from [TABLE_NAME] )
    
  31. from https://stackoverflow.com/questions/32100/what-is-the-simplest-sql-query-to-find-the-second-largest-value by cc-by-sa and MIT license