Подтвердить что ты не робот

Запрос на поиск n-го максимального значения столбца

Я хочу найти второе, третье.. максимальное максимальное значение столбца

4b9b3361

Ответ 1

Вы можете отсортировать столбец в нисходящем формате, а затем просто получить значение из n-й строки.

ИЗМЕНИТЬ::

Обновлено в соответствии с запросом на комментарий. ПРЕДУПРЕЖДЕНИЕ полностью непроверено!

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

Что-то вроде выше должно работать для Oracle... вам, возможно, придется сначала получить синтаксис!

Ответ 2

Рассмотрим следующую таблицу Employee с одним столбцом для зарплаты.

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

Ответ 3

Вы не указали, какую базу данных, на MySQL вы можете сделать

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

Пропустит первые 7, а затем вы получите следующие десять самых высоких.

Ответ 4

Pure SQL (примечание: я бы рекомендовал использовать функции 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

Снова вам может понадобиться исправить вашу базу данных, но если вы хотите получить верхнее второе значение в наборе данных, которое потенциально имеет дублируемое значение, вам также понадобится сделать группу:

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

Пропустим первые два, а затем вы получите следующие пять самых высоких.

Ответ 6

(название таблицы = студент, столбец Name=)

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

Ответ 7

Вы можете найти n-е наибольшее значение столбца, используя следующий запрос:

SELECT * FROM TableName a WHERE
    n = (SELECT count(DISTINCT(b.ColumnName)) 
    FROM TableName b WHERE a.ColumnName <=b.ColumnName);

Ответ 8

Вот метод для 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 в самый внутренний блок запросов.

Ответ 9

Select max(sal) 
from table t1 
where N (select max(sal) 
        from table t2 
        where t2.sal > t1.sal)

Чтобы найти Nth max sal.

Ответ 10

SELECT * FROM tablename 
WHERE columnname<(select max(columnname) from tablename) 
order by columnname desc limit 1

Ответ 11

Это запрос для получения nth Наивысший из colomn положил n = 0 для второго наивысшего значения и n = 1 для 3-го наивысшего и так далее...

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

Ответ 12

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

где n = 1, 2, 3,.... n-е максимальное значение.

Ответ 13

В SQL Server просто выполните:

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

И затем выбросьте первое значение, если оно вам не понадобится.

Ответ 14

для 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

Ответ 15

Еще один для 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

Ответ 16

Просто выкопайте этот вопрос, когда ищете ответ самостоятельно, и это, похоже, работает для 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....

Ответ 17

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;

Ответ 18

MySQL:

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

Ответ 19

Ответ: верхняя секунда:

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

Ответ 20

(TableName = Student, 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)

Ответ 21

Я думаю, что запрос ниже будет работать просто отлично на sql оракула... Я сам его протестировал.

Информация, связанная с этим запросом: этот запрос использует две таблицы с именем employee и department с столбцами в сотруднике с именем: 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

спасибо

Ответ 22

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

Изменить номер четыре с помощью N.

Ответ 23

Это можно упростить

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 и т.д.

Ответ 24

Простой SQL-запрос, чтобы получить детальную информацию о сотрудниках, у которой есть Nth MAX Salary в таблице Employee.

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

Рассмотрим структуру таблицы как:

Сотрудник (       id [int primary key auto_increment],       имя [varchar (30)],       зарплата [int]);

Пример:

Если вам нужна 3-го MAX зарплата в приведенной выше таблице, тогда запрос будет выглядеть следующим образом:

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

Аналогично:

Если вам нужна восьмая зарплата MAX в приведенной выше таблице, тогда запрос будет выглядеть следующим образом:

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

Примечание:Когда вам нужно получить значение Nth MAX, вы должны указать OFFSET как (N - 1).

Подобным образом вы можете выполнять такую ​​же операцию в случае зарплаты в порядке возрастания.

Ответ 25

В PostgreSQL найдите N-ю самую большую зарплату из таблицы Employee.

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

Ответ 26

Сотрудник таблицы

salary 
1256
1256
2563
8546
5645

Вы найдете второе максимальное значение по этому запросу

select salary 
from employee 
where salary=(select max(salary) 
                from employee 
                where salary <(select max(salary) from employee));

Вы найдете третье максимальное значение по этому запросу

select salary 
from employee 
where salary=(select max(salary) 
                from employee 
                where salary <(select max(salary) 
                                from employee 
                                where salary <(select max(salary)from employee)));