Метод upper () не изменяет значение переменной, он возвращает только строку, в которой все символы в верхнем регистре.
Таким образом, вы можете распечатать его напрямую:
print(Quacks.upper())
или сначала изменить, а затем напечатать:
Quacks = Quacks.upper()
print(Quacks)
Вы могли отсортировать столбец в убывающий формат и затем просто получить значение из энной строки.
РЕДАКТИРОВАНИЕ::
Обновленный согласно запросу комментария. ПРЕДУПРЕЖДЕНИЕ полностью непротестированный!
SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6
Что-то как вышеупомянутое должно работать на Oracle..., Вам, возможно, придется разобраться в синтаксисе сначала!
Другой для 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
Я думаю, что приведенный ниже запрос будет отлично работать на 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
, спасибо
Ответ: верхняя секунда:
select * from (select * from deletetable where rownum <=2 order by rownum desc) where rownum <=1
для 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
В SQL Server просто сделайте:
select distinct top n+1 column from table order by column desc
И затем выбрасывают первое значение, если Вам не нужно оно.
SELECT * FROM tablename
WHERE columnname<(select max(columnname) from tablename)
order by columnname desc limit 1
Просто выкопал этот вопрос, когда искал ответ сам, и это, кажется, работает для 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...
.
Вот метод для 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-е наибольшее значение столбца, используя следующий запрос:
SELECT * FROM TableName a WHERE
n = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE a.ColumnName <=b.ColumnName);
Чистый 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 |
+------+
Снова Вы, возможно, должны зафиксировать для своей базы данных, но если Вы захотите главное 2-е значение в наборе данных, которому потенциально копировали значение, Вы захотите сделать группу также:
SELECT column
FROM table
WHERE column IS NOT NULL
GROUP BY column
ORDER BY column DESC
LIMIT 5 OFFSET 2;
пропустил бы первые два, и затем получит Вас следующие самые высокие пять.
Вы не указали, какую базу данных в MySQL вы можете сделать.
SELECT column FROM table ORDER BY column DESC LIMIT 7,10;
Пропустит первые 7, а затем получит следующую десятку.
Рассмотрим следующую таблицу 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 | +------+
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;
Select max(sal)
from table t1
where N (select max(sal)
from table t2
where t2.sal > t1.sal)
Чтобы найти N-ую макс. Цену