it-swarm-ko.com

열의 n 번째 최대 값을 찾기위한 쿼리

열의 두 번째, 세 번째 .n 번째 최대 값을 찾고 싶습니다.

24
kiritsinh parmar

열을 내림차순으로 정렬 한 다음 n 번째 행에서 값을 얻을 수 있습니다.

편집하다::

의견 요청에 따라 업데이트되었습니다. [~ # ~] 경고 [~ # ~] 완전히 테스트되지 않았습니다!

SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6

위와 같은 것이 Oracle에서 작동해야합니다 ... 구문을 먼저 구해야 할 수도 있습니다!

11
TK.

급여에 대한 단일 열이있는 다음 직원 테이블을 고려하십시오.

 + ------ + 
 | Sal | 
 + ------ + 
 | 3500 | 
 | 2500 | 
 | 2500 | 
 | 5500 | 
 | 7500 | 
 + ------ + 

다음 쿼리는 Nth Maximum 요소를 반환합니다.

select SAL from EMPLOYEE E1 where 
 (N - 1) = (select count(distinct(SAL)) 
            from EMPLOYEE E2 
            where E2.SAL > E1.SAL )

예를 들어. 두 번째 최대 값이 필요한 경우

  select SAL from EMPLOYEE E1 where 
     (2 - 1) = (select count(distinct(SAL)) 
                from EMPLOYEE E2 
                where E2.SAL > E1.SAL )
 + ------ + 
 | Sal | 
 + ------ + 
 | 5500 | 
 + ------ + 
30
dexter

MySQL에서 수행 할 수있는 데이터베이스를 지정하지 않았습니다.

SELECT column FROM table ORDER BY column DESC LIMIT 7,10;

처음 7 개를 건너 뛰고 다음 10 개 최고치를 얻으십시오.

8
Pieter

다시 데이터베이스에 대한 수정이 필요할 수 있지만 잠재적으로 값이 복제 된 데이터 집합에서 상위 2 위 값을 원할 경우 그룹도 수행해야합니다.

SELECT column 
FROM table 
WHERE column IS NOT NULL 
GROUP BY column 
ORDER BY column DESC 
LIMIT 5 OFFSET 2;

처음 두 개를 건너 뛰면 다음 다섯 최고를 얻을 것입니다.

6
Steven Dickinson

순수 SQL (참고 : DBMS에 고유 한 SQL 기능을 사용하는 것이 더 효율적일 것입니다). 이렇게하면 n + 1 번째로 큰 값을 얻을 수 있습니다 (가장 작아 지려면 <를 뒤집으십시오). 중복이 있으면 COUNT (DISTINCT VALUE)로 만드십시오.

select id from table order by id desc limit 4 ;
+------+
| id   |
+------+
| 2211 | 
| 2210 | 
| 2209 | 
| 2208 | 
+------+


SELECT yourvalue
  FROM yourtable t1
 WHERE EXISTS( SELECT COUNT(*)
                 FROM yourtable t2
                WHERE t1.id       <> t2.id
                  AND t1.yourvalue < t2.yourvalue
               HAVING COUNT(*) = 3 )


+------+
| id   |
+------+
| 2208 | 
+------+
5
Matt Rogish

(표 이름 = 학생, 열 이름 = 표시)

select * from(select row_number() over (order by mark desc) as t,mark from student group by mark) as td where t=4
3
German Alex

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

SELECT * FROM TableName a WHERE
    n = (SELECT count(DISTINCT(b.ColumnName)) 
    FROM TableName b WHERE a.ColumnName <=b.ColumnName);
2
Abhishek B Patel
Select max(sal) 
from table t1 
where N (select max(sal) 
        from table t2 
        where t2.sal > t1.sal)

N 번째 최대 살을 찾으려면.

1
Piyush
select column_name from table_name 
order by column_name desc limit n-1,1;

여기서 n = 1, 2, 3, .... n 번째 최대 값입니다.

1
rashedcs

다음은 Oracle을위한 방법입니다. 이 예는 9 번째로 높은 값을 얻습니다. 9를 원하는 위치가 포함 된 바인드 변수로 바꾸십시오.

   select created from (
     select created from (
       select created from user_objects
         order by created desc
       )
       where rownum <= 9
       order by created asc
     )
     where rownum = 1

N 번째 고유 한 값을 원하면 가장 안쪽 쿼리 블록에 DISTINCT를 추가합니다.

1
Dave Costa

대답을 직접 찾을 때이 질문을 파면 SQL Server 2005에서 작동하는 것처럼 보입니다 ( Blorgbeard의 솔루션 에서 파생 됨).

SELECT MIN(q.col1) FROM (
    SELECT
        DISTINCT TOP n col1
        FROM myTable
        ORDER BY col1 DESC
) q;

효과적으로, 이것은 SELECT MIN(q.someCol) FROM someTable q이며, 테이블의 상위 n 개는 SELECT DISTINCT... 쿼리에 의해 검색됩니다.

1
Phil H

이것은 열에서 nth Highest를 가져 오는 쿼리입니다 .n = 0은 두 번째로 높고 n = 1은 3 번째로 높습니다.

 SELECT * FROM TableName
 WHERE ColomnName<(select max(ColomnName) from TableName)-n order by ColomnName desc limit 1;
SELECT * FROM tablename 
WHERE columnname<(select max(columnname) from tablename) 
order by columnname desc limit 1
1
shankar

MySQL :

select distinct(salary) from employee order by salary desc limit (n-1), 1;
0
Ritesh

(TableName = 학생, ColumnName = Mark) :

select *
from student 
where mark=(select mark 
            from(select row_number() over (order by mark desc) as t,
                 mark 
                 from student group by mark) as td 
            where t=2)
0
German Alex

아래 쿼리는 Oracle SQL에서 완벽하게 작동한다고 생각합니다 ... 내가 직접 테스트했습니다 ..

이 쿼리와 관련된 정보 :이 쿼리는 employeedepartment라는 두 테이블을 직원 이름이 name (직원 이름), dept_id (직원 및 부서 공통), salary

부서 테이블의 열 : dept_id (직원 테이블에도 공통), dept_name

SELECT
  tab.dept_name,MIN(tab.salary) AS Second_Max_Sal FROM (
    SELECT e.name, e.salary, d.dept_name, dense_rank() over (partition BY  d.dept_name          ORDER BY e.salary)  AS   rank FROM department d JOIN employee e USING (dept_id) )  tab
 WHERE
   rank  BETWEEN 1 AND 2
 GROUP BY
   tab.dept_name

감사

0
ria

SQL Server에서 특정 열의 N 번째 최대 값을 찾는 솔루션 :

직원 테이블 :

Employee Table

판매 테이블 :

Sales Table

직원 테이블 데이터 :

==========
Id  name
=========
6   ARSHAD M
7   Manu
8   Shaji

판매 테이블 데이터 :

=================
id  emp_id   amount
=================
1   6        500
2   7        100
3   8        100
4   6        150
5   7        130
6   7        130
7   7        330

최고 판매 사원/ N 최고 영업 사원을 가진 직원의 세부 사항을 찾기위한 조회

select * from (select E.Id,E.name,SUM(S.amount) AS 'total_amount' from employee E INNER JOIN Sale S on E.Id=S.emp_id group by S.emp_id,E.Id,E.name ) AS T1 WHERE(0)=( select COUNT(DISTINCT(total_amount)) from(select E.Id,E.name,SUM(S.amount) AS 'total_amount' from employee E INNER JOIN Sale S on E.Id=S.emp_id group by S.emp_id,E.Id,E.name )AS T2 WHERE(T1.total_amount<T2.total_amount) );

WHERE (0)에서 0을 n-1로 바꿉니다.

결과:

========================
id  name    total_amount
========================
7   Manu    690
0
ARSHAD M

이렇게 단순화 할 수 있습니다

SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT TOP 4 Sal FROM TableName ORDER BY Sal DESC)

Sal에 중복 값이 ​​포함 된 경우이를 사용하십시오.

SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT distinct TOP 4 Sal FROM TableName ORDER BY Sal DESC)

4는 n 번째 값이며 5 또는 6 등과 같은 가장 높은 값일 수 있습니다.

0
user3844776
Select min(fee) 
from fl_FLFee 
where fee in (Select top 4 Fee from fl_FLFee order by 1 desc)

N으로 번호 4를 변경하십시오.

0
user3110552
select sal,ename from emp e where
 2=(select count(distinct sal) from emp  where e.sal<=emp.sal) or
 3=(select count(distinct sal) from emp  where e.sal<=emp.sal) or
 4=(select count(distinct sal) from emp  where e.sal<=emp.sal) order by sal desc;
0
Ankush

PostgreSQL의 Employee 테이블에서 N 번째로 큰 급여를 찾으십시오.

SELECT * FROM Employee WHERE salary in 
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT N) 
ORDER BY salary ASC LIMIT 1;
0
Trung Lê Hoàng

mysql query : n 번째 최대 급여 양식 직원 테이블을 찾고 싶다고 가정하십시오

select salary 
form employee
order by salary desc
limit n-1,1 ;
0
mjp

테이블 Salary에 Nth MAX Employee 인 직원 세부 정보를 가져 오는 간단한 SQL 쿼리

sql> select * from Employee order by salary desc LIMIT 1 OFFSET <N - 1>;

테이블 구조를 다음과 같이 고려하십시오

직원 (id [int 기본 키 auto_increment], 이름 [varchar (30)], 급여 [int]);

예 :

위 표에서 3 차 MAX 급여가 필요한 경우 쿼리는 다음과 같습니다.

sql> select * from Employee order by salary desc LIMIT 1 OFFSET 2;

유사하게 :

위 표에서 8 번째 MAX 급여가 필요한 경우 쿼리는 다음과 같습니다.

sql> select * from Employee order by salary desc LIMIT 1 OFFSET 7;

NOTE :NthMAX 값을 가져와야 할 경우 OFFSET(N- 1).

이와 같이 급여의 경우 오름차순으로 같은 종류의 작업을 수행 할 수 있습니다

0
Rahul Raina

SQL Server에서 다음을 수행하십시오.

select distinct top n+1 column from table order by column desc

그런 다음 필요하지 않은 경우 첫 번째 값을 버립니다.

0
Blorgbeard

분석 기능을 사용하는 Oracle의 또 다른 기능 :

select distinct col1 --distinct is required to remove matching value of column
from 
( select col1, dense_rank() over (order by col1 desc) rnk
  from tbl
)
where rnk = :b1
0
Eugene Patek

sQL 2005의 경우 :

SELECT col1 from 
     (select col1, dense_rank(col1) over (order by col1 desc) ranking 
     from t1) subq where ranking between 2 and @n
0
JesseG

답 : 최고 초 :

select * from (select * from deletetable   where rownum <=2 order by rownum desc) where rownum <=1
0
parveen