두 번째로 큰 값을 찾는 가장 간단한 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 고유 솔루션이 모두 있으므로 필요한 데이터베이스를 명확히하고 싶을 수도 있습니다. 내가 추측해야한다면 SQL Server는 MySQL에서 사소하기 때문에 말할 것입니다.
또한 중복 가능성을 고려하지 않아 작동하지 않는 솔루션도 있으므로 어떤 솔루션을 사용할 수 있는지주의하십시오. 마지막으로, 몇 가지 작동하지만 테이블을 두 번 완전히 스캔하는 것을 볼 수 있습니다. 두 번째 스캔이 2 개의 값만보고 있는지 확인하려고합니다.
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 TOP 2 [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 *
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
가장 쉬운 방법은 응용 프로그램의이 결과 집합에서 두 번째 값을 얻는 것입니다.
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 `Column` FROM `Table` ORDER BY `Column` DESC LIMIT 1,1;
SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
이 쿼리는 전체 테이블의 최대 급여를 포함하지 않는 결과에서 최대 급여를 반환합니다.
내가 알고있는 오래된 질문이지만, 이것은 나에게 더 나은 exec 계획을 주었다.
SELECT TOP 1 LEAD(MAX (column)) OVER (ORDER BY column desc)
FROM TABLE
GROUP BY column
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 sal from salary order by sal desc limit 1 offset 1
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
하위 쿼리가 필요하지 않습니다 ... 한 행을 건너 뛰고 내림차순으로 주문 후 두 번째 행을 선택하십시오.
이것은 매우 간단한 코드입니다.
예 : 테이블 이름 = 테스트
salary
1000
1500
1450
7500
두 번째로 큰 가치를 얻는 MSSQL 코드
select salary from test order by salary desc offset 1 rows fetch next 1 rows only;
여기서 'offset 1 rows'는 두 번째 테이블 행을 의미하며 '다음 1 행만 가져 오기'는 해당 1 행만 표시하기위한 것입니다. '다음 1 행만 가져 오기'를 사용하지 않으면 두 번째 행의 모든 행이 표시됩니다.
select min(sal) from emp where sal in
(select TOP 2 (sal) from emp order by sal desc)
노트
sal은 col name입니다
.emp는 테이블 이름입니다.
Tom, believe this will fail when there is more than one value returned in select max([COLUMN_NAME]) from [TABLE_NAME]
section. i.e. where there are more than 2 values in the data set.
Slight modification to your query will work -
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 returns all values other than the largest. select the max value from the returned list.
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
It is the most esiest way:
SELECT
Column name
FROM
Table name
ORDER BY
Column name DESC
LIMIT 1,1
select age from student group by id having age<(select max(age) from student)order by age limit 1
As you mentioned duplicate values . In such case you may use DISTINCT and GROUP BY to find out second highest value
Here is a table
salary
:
GROUP BY
SELECT amount FROM salary
GROUP by amount
ORDER BY amount DESC
LIMIT 1 , 1
DISTINCT
SELECT DISTINCT amount
FROM salary
ORDER BY amount DESC
LIMIT 1 , 1
First portion of LIMIT = starting index
Second portion of LIMIT = how many value
SELECT MAX(sal) FROM emp
WHERE sal NOT IN (SELECT top 3 sal FROM emp order by sal desc )
this will return the third highest sal of emp table
select max(column_name) from table_name
where column_name not in (select max(column_name) from table_name);
not in is a condition that exclude the highest value of column_name.
Reference : programmer interview
Something like this? I haven't tested it, though:
select top 1 x
from (
select top 2 distinct x
from y
order by x desc
) z
order by x
See How to select the nth row in a SQL database table?.
Sybase SQL Anywhere supports:
SELECT TOP 1 START AT 2 value from table ORDER BY value
Using a correlated query:
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)
This query selects the maximum three salaries. If two emp get the same salary this does not affect the query.
select top 1 MyIntColumn from MyTable
where
MyIntColumn <> (select top 1 MyIntColumn from MyTable order by MyIntColumn desc)
order by MyIntColumn desc
This works in MS SQL:
select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] <
( select max([COLUMN_NAME]) from [TABLE_NAME] )
'Programing' 카테고리의 다른 글
배열에서 모든 문자열을 자르려면 어떻게해야합니까? (0) | 2020.06.09 |
---|---|
Gradle이 tools.jar을 찾을 수 없습니다 (0) | 2020.06.09 |
스칼라에서 파일에 쓰는 방법? (0) | 2020.06.09 |
프로그래밍 방식으로 TabBar 탭보기로 전환 하시겠습니까? (0) | 2020.06.09 |
NoneType 객체에 단위 테스트의 assertRaises ()를 올바르게 사용하는 방법은 무엇입니까? (0) | 2020.06.09 |