特定の列で 2 番目に大きい整数値を見つけるための最も簡単な SQL クエリは何ですか?
列に重複した値がある可能性があります。
SELECT MAX( col )
FROM table
WHERE col < ( SELECT MAX( col )
FROM table )
SELECT MAX(col)
FROM table
WHERE col NOT IN ( SELECT MAX(col)
FROM table
);
T-Sql には 2 つの方法があります。
--filter out the max
select max( col )
from [table]
where col < (
select max( col )
from [table] )
--sort top two then bottom one
select top 1 col
from (
select top 2 col
from [table]
order by col) topTwo
order by col desc
Microsoft SQL では、問題の列がクラスター化されている場合でも、最初の方法は 2 番目の方法の 2 倍高速です。
これは、max
集計で使用されるテーブルまたはインデックス スキャンと比較して、並べ替え操作が比較的遅いためです。
または、Microsoft SQL 2005 以降では、次のROW_NUMBER()
関数を使用できます。
select col
from (
select ROW_NUMBER() over (order by col asc) as 'rowNum', col
from [table] ) withRowNum
where rowNum = 2
ここには、SQL Server 固有のソリューションと MySQL 固有のソリューションの両方が表示されているため、必要なデータベースを明確にすることをお勧めします。ただし、これは MySQL では些細なことなので、推測する必要がある場合は SQL Server と言うでしょう。
また、重複の可能性を考慮していないために機能しないソリューションもいくつか見られるため、どのソリューションを受け入れるか注意してください。最後に、機能するものの、テーブルの完全なスキャンが 2 回行われるものをいくつか見つけました。2 回目のスキャンで 2 つの値のみを確認する必要があります。
SQL Server (2012 年より前):
SELECT MIN([column]) AS [column]
FROM (
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
) a
MySQL:
SELECT `column`
FROM `table`
GROUP BY `column`
ORDER BY `column` DESC
LIMIT 1,1
アップデート:
SQL Server 2012 は、よりクリーンな (そして標準の) OFFSET/FETCH 構文をサポートするようになりました。
SELECT [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;
次のようなことができると思います:
SELECT *
FROM Table
ORDER BY NumericalColumn DESC
LIMIT 1 OFFSET 1
また
SELECT *
FROM Table ORDER BY NumericalColumn DESC
LIMIT (1, 1)
データベースサーバーによって異なります。ヒント: SQL Server は LIMIT を行いません。
次のクエリを使用して、列の 2 番目に大きい値を見つけることができます
SELECT *
FROM TableName a
WHERE
2 = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE
a.ColumnName <= b.ColumnName);
次のリンクで詳細を確認できます
http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html
最も簡単な方法は、アプリケーションでこの結果セットから 2 番目の値を取得することです。
SELECT DISTINCT value
FROM Table
ORDER BY value DESC
LIMIT 2
ただし、SQL を使用して 2 番目の値を選択する必要がある場合は、次のようにします。
SELECT MIN(value)
FROM ( SELECT DISTINCT value
FROM Table
ORDER BY value DESC
LIMIT 2
) AS t
2 番目に大きい値を見つけるための非常に単純なクエリ
SELECT `Column`
FROM `Table`
ORDER BY `Column` DESC
LIMIT 1,1;
これは非常に単純なコードです。これを試すことができます:-
ex : テーブル名 = test
salary
1000
1500
1450
7500
2 番目に大きい値を取得する MSSQL コード
select salary from test order by salary desc offset 1 rows fetch next 1 rows only;
ここで、「オフセット 1 行」はテーブルの 2 行目を意味し、「次の 1 行のみをフェッチ」はその 1 行のみを表示するためのものです。「次の 1 行のみをフェッチ」を使用しない場合は、2 行目のすべての行が表示されます。
select * from (select ROW_NUMBER() over (Order by Col_x desc) as Row, Col_1
from table_1)as table_new tn inner join table_1 t1
on tn.col_1 = t1.col_1
where row = 2
これが任意の行の値を取得するのに役立つことを願っています.....
select min(sal) from emp where sal in
(select TOP 2 (sal) from emp order by sal desc)
ノート
salは列名です
empはテーブル名です
select col_name
from (
select dense_rank() over (order by col_name desc) as 'rank', col_name
from table_name ) withrank
where rank = 2
SELECT
*
FROM
table
WHERE
column < (SELECT max(columnq) FROM table)
ORDER BY
column DESC LIMIT 1
select age
from student
group by id having age< ( select max(age)
from student
)
order by age
limit 1
これは、列の 2 番目に大きい値を見つける別の方法です。テーブル 'Student' と列 'Age' を考えてみましょう。クエリは次のとおりです。
select top 1 Age
from Student
where Age in ( select distinct top 2 Age
from Student order by Age desc
) order by Age asc
それは最も簡単な方法です:
SELECT
Column name
FROM
Table name
ORDER BY
Column name DESC
LIMIT 1,1
あなたが言及したように、値が重複しています。このような場合、DISTINCTとGROUP BYを使用して 2 番目に高い値を見つけることができます。
ここにテーブルがあります
給料
:
グループ化
SELECT amount FROM salary
GROUP by amount
ORDER BY amount DESC
LIMIT 1 , 1
明確
SELECT DISTINCT amount
FROM salary
ORDER BY amount DESC
LIMIT 1 , 1
LIMIT の最初の部分 = 開始インデックス
LIMIT の 2 番目の部分 = 値の数
トム、セクションに複数の値が返された場合、これは失敗すると思いますselect max([COLUMN_NAME]) from [TABLE_NAME]
。つまり、データ セットに 3 つ以上の値がある場合です。
クエリを少し変更すると機能します-
select max([COLUMN_NAME])
from [TABLE_NAME]
where [COLUMN_NAME] IN ( select max([COLUMN_NAME])
from [TABLE_NAME]
)
select max(COL_NAME)
from TABLE_NAME
where COL_NAME in ( select COL_NAME
from TABLE_NAME
where COL_NAME < ( select max(COL_NAME)
from TABLE_NAME
)
);
subquery は、最大値以外のすべての値を返します。返されたリストから最大値を選択します。
select * from emp e where 3>=(select count(distinct salary)
from emp where s.salary<=salary)
このクエリは、最大3つの給与を選択します。2人の従業員が同じ給与を受け取った場合、これはクエリに影響しません。
相関クエリを使用する:
Select * from x x1 where 1 = (select count(*) from x where x1.a < a)
Microsoft SQL Server - N 番目に高い値 (エイリアス サブクエリ) に 2 つの TOP を使用します。
2 番目に高い値を求めるには:
SELECT TOP 1 q.*
FROM (SELECT TOP 2 column_name FROM table_name ORDER BY column_name DESC) as q
ORDER BY column_name ASC;
TOP を 2 回使用しますが、エイリアス サブクエリが必要です。基本的に、内側のクエリは最大の 2 つの値を降順で取得し、次に外側のクエリは昇順で反転して、2 番目に高い値が一番上になるようにします。SELECT ステートメントは、このトップを返します。
n 番目に高い値を解決するには、サブクエリの TOP 値を変更します。例えば:
SELECT TOP 1 q.*
FROM (SELECT TOP 5 column_name FROM table_name ORDER BY column_name DESC) as q
ORDER BY column_name;
5 番目に高い値を返します。
SELECT * FROM EMP
WHERE salary=
(SELECT MAX(salary) FROM EMP
WHERE salary != (SELECT MAX(salary) FROM EMP)
);
試す:
select a.* ,b.* from
(select * from (select ROW_NUMBER() OVER(ORDER BY fc_amount desc) SrNo1, fc_amount as amount1 From entry group by fc_amount) tbl where tbl.SrNo1 = 2) a
,
(select * from (select ROW_NUMBER() OVER(ORDER BY fc_amount asc) SrNo2, fc_amount as amount2 From entry group by fc_amount) tbl where tbl.SrNo2 =2) b
行で 2 番目に大きい数値を検索するクエリ-
select Top 1 (salary) from XYZ
where Salary not in (select distinct TOP 1(salary) from XYZ order by Salary desc)
ORDER BY Salary DESC
強調表示Top 1
をTOP 2
に 変更する3
か、4
u はそれぞれ 3 番目、4 番目、5 番目に高い値を見つけることができます。
select top 1 MyIntColumn from MyTable
where
MyIntColumn <> (select top 1 MyIntColumn from MyTable order by MyIntColumn desc)
order by MyIntColumn desc
これは MS SQL で機能します。
select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] <
( select max([COLUMN_NAME]) from [TABLE_NAME] )
このようなもの?ただし、テストしていません。
select top 1 x
from (
select top 2 distinct x
from y
order by x desc
) z
order by x
select MAX(salary) as SecondMax from test where salary !=(select MAX(salary) from test)
SQL データベース テーブルで n 番目の行を選択する方法を参照してください。.
Sybase SQL Anywhere は以下をサポートします。
SELECT TOP 1 START AT 2 value from table ORDER BY value
select score
from table
where score = (select max(score)-1 from table)
次のように、order by 要素と top 1 要素を利用することもできます。
Select top 1 col_name from table_name
where col_name < (Select top 1 col_name from table_name order by col_name desc)
order by col_name desc
SQL テーブルから最後から 2 番目の行を取得する最も簡単な方法は、と setを使用することです。ORDER BY
ColumnName
DESC
LIMIT 1,1
これを試して:
SELECT * from `TableName` ORDER BY `ColumnName` DESC LIMIT 1,1