programing

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

padding 2023. 8. 26. 10:31
반응형

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

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

열에 중복된 값이 있을 수 있습니다.

SELECT MAX( col )
  FROM table
 WHERE col < ( SELECT MAX( col )
                 FROM table )
SELECT MAX(col) 
FROM table 
WHERE col NOT IN ( SELECT MAX(col) 
                   FROM table
                 );

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 

Microsoft SQL에서는 문제의 열이 클러스터된 경우에도 첫 번째 방법이 두 번째 방법보다 두 배 더 빠릅니다.

이는 정렬 작업이 테이블 또는 인덱스 스캔에 비해 상대적으로 느리기 때문입니다.max집계 용도

또는 Microsoft SQL 2005 이상에서 다음을 사용할 수 있습니다.ROW_NUMBER()함수:

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

여기에는 일부 SQL Server 관련 솔루션과 일부 MySQL 관련 솔루션이 모두 표시되므로 필요한 데이터베이스를 명확히 해야 합니다.하지만 MySQL에서는 사소한 일이기 때문에 SQL Server라고 말할 수 있습니다.

중복 가능성을 고려하지 않아 작동하지 않는 솔루션도 있으므로 어떤 솔루션을 수락할지 주의하십시오.마지막으로, 효과가 있는 몇 가지를 볼 수 있지만 테이블을 두 번 완전히 스캔할 수 있습니다.두 번째 스캔에서는 두 개의 값만 확인하려고 합니다.

SQL Server(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 Server 2012는 이제 훨씬 깔끔한(및 표준) OFFSET/FETCH 구문을 지원합니다.

SELECT [column] 
FROM [Table] 
GROUP BY [column] 
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;

다음과 같은 작업을 수행할 수 있습니다.

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

또는

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

데이터베이스 서버에 따라 다릅니다.힌트: SQL Server에서 LIMIT를 수행하지 않습니다.

가장 쉬운 방법은 애플리케이션에서 이 결과 집합에서 두 번째 값을 가져오는 것입니다.

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

다음 쿼리를 사용하여 두 번째로 큰 열 값을 찾을 수 있습니다.

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

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

하위 쿼리가 필요 없습니다...한 행을 건너뛰고 내림차순으로 두 번째 행을 선택합니다.

두 번째로 큰 값을 찾기 위한 매우 간단한 쿼리

SELECT `Column` 
FROM `Table` 
ORDER BY `Column` DESC 
LIMIT 1,1;
SELECT MAX(Salary) 
FROM Employee 
WHERE Salary NOT IN ( SELECT MAX(Salary) 
                      FROM Employee 
                    )

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

오래된 질문이지만, 이것은 나에게 더 나은 실행 계획을 주었습니다.

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

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

ex : 테이블 이름 = 테스트

salary 

1000
1500
1450
7500

두 번째로 큰 값을 가져오는 MSSQL 코드

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

여기서 '다음 1행만 표시'는 테이블의 두 번째 행을 의미하며 '다음 1행만 표시'는 해당 한 행만 표시하는 것입니다. '다음 1행만 표시'를 사용하지 않으면 두 번째 행의 모든 행이 표시됩니다.

가장 단순한

select sal 
from salary 
order by sal desc 
limit 1 offset 1

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

이 도움으로 모든 행의 값을 얻을 수 있기를 바랍니다.

이 쿼리를 사용합니다.

SELECT MAX( colname ) 
FROM Tablename 
where colname < (
    SELECT MAX( colname ) 
    FROM Tablename)
select min(sal) from emp where sal in 
    (select TOP 2 (sal) from emp order by sal desc)

메모


은 테이블 이름입니다.

select col_name
from (
    select dense_rank() over (order by col_name desc) as 'rank', col_name
    from table_name ) withrank 
where rank = 2
SELECT 
    * 
FROM 
    table 
WHERE 
    column < (SELECT max(columnq) FROM table) 
ORDER BY 
    column DESC LIMIT 1

이것이 가장 중요한 방법입니다.

SELECT
      Column name
FROM
      Table name 
ORDER BY 
      Column name DESC
LIMIT 1,1

중복된 값을 언급한 것처럼.이러한 경우 DISTINCT 및 GROUP BY를 사용하여 두 번째로 높은 값을 찾을 수 있습니다.

여기 테이블이 있습니다.

급여

:

enter image description here

그룹화 기준

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 = 시작 인덱스의 첫 번째 부분

LIMIT의 두 번째 부분 = 값 수

두개일 때 .select max([COLUMN_NAME]) from [TABLE_NAME]섹션. 즉, 데이터 세트에 값이 두 개 이상 있는 경우.

당신의 질문에 약간의 수정이 가능할 것입니다 -

select max([COLUMN_NAME]) 
from [TABLE_NAME] 
where [COLUMN_NAME] IN ( select max([COLUMN_NAME]) 
                         from [TABLE_NAME] 
                       )
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
                                      )
                   );

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

이것은 열의 두 번째로 큰 값을 찾는 또 다른 방법입니다.'학생' 표와 '연령' 열을 고려합니다.그렇다면 질문은,

select top 1 Age 
from Student 
where Age in ( select distinct top 2 Age  
               from Student order by Age desc 
             ) order by Age asc
select age 
from student 
group by id having age< ( select max(age) 
                          from student 
                        )
order by age 
limit 1
SELECT MAX(sal) 
FROM emp
WHERE sal NOT IN ( SELECT top 3 sal 
                   FROM emp order by sal desc 
                 )
            

이것은 세 번째로 높은 할인율을 반환할 것입니다.

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

not in은 columnn_name의 가장 높은 값을 제외한 조건입니다.

참고자료 : 프로그래머 인터뷰

이런 거?테스트는 안 해봤지만, 하지만:

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

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

Sybase SQL Anywhere는 다음을 지원합니다.

SELECT TOP 1 START AT 2 value from table ORDER BY value

상관 쿼리 사용:

Select * from x x1 where 1 = (select count(*) from x where x1.a < a)
select * from emp e where 3>=(select count(distinct salary)
    from emp where s.salary<=salary)

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

언급URL : https://stackoverflow.com/questions/32100/what-is-the-simplest-sql-query-to-find-the-second-largest-value

반응형