두 번째로 큰 값을 찾는 가장 간단한 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를 사용하여 두 번째로 높은 값을 찾을 수 있습니다.
여기 테이블이 있습니다.
급여
:
그룹화 기준
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
'programing' 카테고리의 다른 글
각 루프에서 프로그램 실행 (0) | 2023.08.26 |
---|---|
jQuery를 사용하여 요소를 뷰로 스크롤하려면 어떻게 해야 합니까? (0) | 2023.08.26 |
"could not find driver"를 대규모로 해결하는 방법은? (0) | 2023.08.26 |
asp.net core 1.0에서 Excel 파일 읽기 (0) | 2023.08.26 |
상대적 위치 대 절대적 위치? (0) | 2023.08.26 |