Я хочу найти второе, третье.. максимальное максимальное значение столбца
Запрос на поиск n-го максимального значения столбца
Ответ 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)));