it-swarm-tr.com

Bir sütunun nth max değerini bulma sorgusu

Bir sütunun maksimum 2, 3 .. inci değerini bulmak istiyorum

24
kiritsinh parmar

Sütunu azalan biçime göre sıralayabilir ve daha sonra nth satırından bir değer elde edebilirsiniz.

DÜZENLE::

Yorum isteğine göre güncellendi.ALERTtamamen denenmemiş!

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

Yukarıdaki gibi bir şey Oracle için çalışmalı ... önce sentaksı sağlaman gerekebilir!

11
TK.

Aşağıdaki Çalışan tablosunu, maaş için tek bir sütuna sahip olarak değerlendirin.

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

Aşağıdaki sorgu Nth Maximum öğesini döndürür.

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

Örneğin ikinci maksimum değer gerektiğinde,

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

MySQL'de hangi veritabanını yapabileceğinizi belirtmediniz.

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

İlk 7’yi atlar, sonra da bir sonraki en yüksek on olur.

7
Pieter

Yine veritabanınız için düzeltmeniz gerekebilir, ancak potansiyel olarak yinelenen değeri olan bir veri kümesindeki en üst 2. değeri istiyorsanız, bir grup da yapmak istersiniz:

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

İlk ikisini atlar ve sonra bir sonraki beşe geçersin. 

5
Steven Dickinson

Saf SQL (not: muhtemelen daha verimli olacağından DBMS'nize özgü SQL özelliklerini kullanmanızı öneririm). Bu size n + 1'inci en büyük değeri verir (en küçüğünü almak için <değerini çevirin). Eğer çiftleriniz varsa, COUNT (DISTINCT VALUE) yapın.

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 | 
+------+
4
Matt Rogish

(Tablo Adı = Öğrenci, Sütun Adı = işaret)

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

Sütunun en büyük değerini aşağıdaki sorguyu kullanarak bulabilirsiniz:

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)

Nth max sal bulmak için.

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

buradaki n = 1, 2, 3, .... nth max değeri.

1
rashedcs

İşte Oracle için bir yöntem. Bu örnek 9. en yüksek değeri alır. Basitçe 9, aradığınız pozisyonu içeren bir bağlama değişkeniyle değiştirin.

   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

Eğer nnth benzersiz bir değer istiyorsanız, en içteki sorgu bloğuna DISTINCT eklersiniz.

1
Dave Costa

Bu, en yüksek ikinci en yüksek için n = 0, en yüksek en yüksek 3. ve en yüksek 3. sıralarda n = 1 sütunundan en yüksek değeri almak içindir.

 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 = Öğrenci, SütunAdı = İşaret):

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

Aşağıdaki sorgu Oracle sql üzerinde sadece mükemmel çalışacağını düşünüyorum ... Ben kendim test ettim ..

Bu sorgu ile ilgili bilgiler: Bu sorgu employee ve department adlı iki tabloyu, çalışanın sütunlarında bulunan :name (çalışan adı), dept_id (çalışan ve departman için ortak), salary adlı iki tablo kullanıyor

Bölüm tablosundaki sütunlar: dept_id (çalışan tablosu için de ortak), 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

teşekkürler

0
ria

Belirli bir sütunun Nth Maximum değerini SQL Server'da bulmak için çözüm:

Çalışan tablosu:

Employee Table

Satış tablosu:

Sales Table

Çalışan tablosu verileri:

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

Satış tablosu verileri:

=================
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

En yüksek satış/N/ en yüksek satış temsilcisi olan bir çalışanın ayrıntılarını öğrenmek için Sorgu

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) içinde 0 ile n-1 yerine

Sonuç:

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

Bu şekilde basitleştirebilirsiniz 

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

Sal, yinelenen değerler içeriyorsa, bunu kullanın.

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

4, 5 veya 6 gibi herhangi bir en yüksek değer olabilir.

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

N ile dört numarayı değiştir.

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'de, Çalışan tablosundan N'inci en büyük maaşı bulmak için.

SELECT * FROM Employee WHERE salary in 
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT N) 
ORDER BY salary ASC LIMIT 1;
0

mysql query : varsayalım nth max maaş formu çalışan tablosu

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

Simple SQL Query, Nth MAX Salary tablosundaki Employee tablosundaki çalışan detayını görmek için.

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

Tablo yapısını şöyle düşünün:

Çalışan ( İd [int birincil anahtar otomatik işletme], Name [varchar (30)], Maaş [int]);

Örnek:

Yukarıdaki tabloda 3. MAX maaşına ihtiyacınız varsa, sorgu şu şekilde olacaktır:

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

Benzer şekilde:

Yukarıdaki tabloda 8. MAX maaş gerekiyorsa, sorgu şu şekilde olacaktır:

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

NOT: NthMAX değerini almanız gerektiğinde, OFFSET değerini (N - 1) olarak vermelisiniz.

Bunun gibi, artan sırayla maaş durumunda da aynı işlemi yapabilirsiniz.

0
Rahul Raina

SQL Server'da, sadece yapın:

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

Ve sonra ihtiyacın yoksa, ilk değeri at.

0
Blorgbeard

Analitik fonksiyonları kullanan Oracle için bir tane daha:

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

Cevabı kendim ararken sadece bu soruyu çözdüm ve bu SQL Server 2005 için çalışıyor gibi görünüyor ( Blorgbeard'in çözümü )

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

Etkili, bu, SELECT DISTINCT... sorgusu tarafından alınan tablonun en üstündeki n bir SELECT MIN(q.someCol) FROM someTable q işlevidir.

0
Phil H

sQL 2005 için:

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

Cevap: İlk saniye:

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