Запрос для нахождения энного макс. значения столбца

Метод upper () не изменяет значение переменной, он возвращает только строку, в которой все символы в верхнем регистре.

Таким образом, вы можете распечатать его напрямую:

print(Quacks.upper())

или сначала изменить, а затем напечатать:

Quacks = Quacks.upper()
print(Quacks)

24
задан Matt Rogish 17 September 2008 в 12:14
поделиться

16 ответов

Вы могли отсортировать столбец в убывающий формат и затем просто получить значение из энной строки.

РЕДАКТИРОВАНИЕ::

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

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

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

11
ответ дан 28 November 2019 в 22:29
поделиться

Другой для 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
ответ дан 28 November 2019 в 22:29
поделиться

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

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

, спасибо

0
ответ дан 28 November 2019 в 22:29
поделиться

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

select * from (select * from deletetable   where rownum <=2 order by rownum desc) where rownum <=1
0
ответ дан 28 November 2019 в 22:29
поделиться

для 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
ответ дан 28 November 2019 в 22:29
поделиться

В SQL Server просто сделайте:

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

И затем выбрасывают первое значение, если Вам не нужно оно.

0
ответ дан 28 November 2019 в 22:29
поделиться
SELECT * FROM tablename 
WHERE columnname<(select max(columnname) from tablename) 
order by columnname desc limit 1
1
ответ дан 28 November 2019 в 22:29
поделиться

Просто выкопал этот вопрос, когда искал ответ сам, и это, кажется, работает для SQL Server 2005 (получено из решения Blorgbeard ):

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

Фактически, то есть a SELECT MIN(q.someCol) FROM someTable q, с верхним n таблицы, полученной по запросу SELECT DISTINCT....

1
ответ дан 28 November 2019 в 22:29
поделиться

Вот метод для 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

, Если бы Вы хотели энное уникальное значение, Вы добавили бы ОТЛИЧНЫЙ на самом внутреннем блоке запроса.

1
ответ дан 28 November 2019 в 22:29
поделиться

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

SELECT * FROM TableName a WHERE
    n = (SELECT count(DISTINCT(b.ColumnName)) 
    FROM TableName b WHERE a.ColumnName <=b.ColumnName);
2
ответ дан 28 November 2019 в 22:29
поделиться

Чистый 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
ответ дан 28 November 2019 в 22:29
поделиться

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

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

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

6
ответ дан 28 November 2019 в 22:29
поделиться

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

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

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

9
ответ дан 28 November 2019 в 22:29
поделиться

Рассмотрим следующую таблицу 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 |
+------+
30
ответ дан 28 November 2019 в 22:29
поделиться
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
ответ дан 28 November 2019 в 22:29
поделиться
Select max(sal) 
from table t1 
where N (select max(sal) 
        from table t2 
        where t2.sal > t1.sal)

Чтобы найти N-ую макс. Цену

1
ответ дан 28 November 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: