OracleでテーブルからN番目に大きいエントリを見つける方法を教えてもらえますか?
私たちが使用できる最大のものと同様MAX(column_name)n番目に大きいものを見つけるための効率的な方法はありますか?
SELECT * FROM( SELECT some_column、 row_number()over(order by your_sort_column desc)as row_num FROM some_table )t WHERE row_num = 3
your_sort_column
で同じ値が複数の行にあると予想される場合は、rank()関数も使用できます
SELECT * FROM( SELECT some_column、 rank()over(order by your_sort_column desc)as row_rank FROM some_table )t WHERE row_rank = 3
次のクエリを使用して、列のn番目に大きい値を見つけることができます
SELECT * FROM TableName a WHERE
n = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE a.ColumnName <=b.ColumnName);
以下のクエリは、NOT INを使用して2番目に高いレコードを見つけるのに役立ちます。
SELECT MAX(
userId
)FROMテーブルWHERE userId
NOT IN(SELECT MAX(userId
)FROM table)</ code>
シンプルで便利な...
2番目に高い給与で機能し、
$query = "SELECT * FROM `table_name` ORDER BY field_name` DESC LIMIT 1 , 1 ";
2番目に大きな給与を取得するには、次のようにします。
select salary from
(select s2.salary,rownum rm from
(select distinct salary from employees order by salary desc)
s2 where rownum<=2)
where rm >= 2
SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (
SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal
);
置換&N
ご希望の番号で。例えば、 2
は、2番目に高い給与になります。
PL/SQLを使用している場合は、ステートメントを実行するだけです。 Nを要求します。
これを試して:
SELECT DISTINCT TOP 3 id,[Password]
FROM Users_changepassword
WHERE [UserId] = 3
ORDER BY id DESC
Oracle SQLのRow_number()関数が使用されているこのSQLを試すことができます
select column_name from (
select column_name ,
row_number() over (order by column_name desc) as row_num
from table_Name ) tablex
where row_num =3
SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee)
CONNECT BY PRIOR
沿って:
CREATE TABLE t(i INT, sal INT);
INSERT INTO t(i, sal)
SELECT 1,100 FROM dual UNION
SELECT 2,100 FROM dual UNION
SELECT 3,200 FROM dual UNION
SELECT 4,500 FROM dual UNION
SELECT 5,1000 FROM dual;
クエリ:
SELECT level, MAX(sal) AS sal
FROM t
--WHERE level = 2 -- set position here
CONNECT BY prior sal > sal
GROUP BY level
ORDER BY level;
編集:
2番目のアプローチは、NTH_VALUE
分析関数:
SELECT DISTINCT NTH_VALUE(sal, 2) OVER(ORDER BY sal DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM t;
これを試して、
SELECT Sal FROM Tab ORDER BY Sal DESC LIMIT 2,1
あなたはできる ORDER BY column name
その後 LIMIT 1,1
2番目のものを取得する
編集
申し訳ありませんが、Oracleタグが表示されませんでした。ORDER BY column name WHERE ROWNUM = 2
のほうがうまくいくはずです。