SQL Server の特定の列で n 個の最大数を見つけようとしています。
列の最大値と 2 番目に大きい値を簡単に見つけることができます。
しかし、どうすれば、列内の 5 つの最大値を見つけることができますか?
SQL Server の特定の列で n 個の最大数を見つけようとしています。
列の最大値と 2 番目に大きい値を簡単に見つけることができます。
しかし、どうすれば、列内の 5 つの最大値を見つけることができますか?
これにMySQLとSQLServerの両方のタグを付けました。SQL Serverでは、次を使用できますTOP
。
SELECT TOP 5 yourColumn
FROM yourTable
ORDER BY someColumn DESC;
TOP
返される行数を制限します。最大/最小値のデータを取得するには、を含める必要がありますORDER BY
。
MySQLでは使用しますLIMIT
SQL Serverでこれを行う別の方法は、次を使用することrow_number()
です。
select id
from
(
select id, row_number() over(order by id desc) rn
from yourtable
) x
where rn <= 5
SQL FiddleWithDemoを参照してください
[LIMIT {[offset,] row_count }]
MySqlでは、次のようにこれを行うことができます。
...
ORDER BY SomeField DESC
LIMIT @n;
SQL Serverの場合、を使用しTOP(n)
て上位nを取得できます。
SELECT TOP(@n) SomeFieldName
FROM TABLE
ORDER BY SomeField DESC
例えば:
SELECT TOP 5 items_sold
FROM tbl_PRODUCT
ORDER BY items_sold dESC
更新:families
製品テーブルへの外部キーを持つ別のテーブルがfamily_ID
あり、上位n個のファミリIDを持つすべての製品を検索する場合。次に、これを点在させることができます:
SELECT *
FROM Products WHERE family_ID IN
(
SELECT TOP 5 family_ID
FROM families
ORDER BY family_ID DESC
)
アップデート2:各ファミリの最上位の製品:
;WITH cte
AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY family_ID ORDER BY items_sold DESC) row_num
FROM @Products
)
SELECT * FROM cte
where row_num = 1
Order by family_ID
SQLサーバー
select min(val)
from your_table
where val in (select top 5 val from your_table order by val desc)
mysql
select min(val)
from your_table
where val in (select val from your_table order by val desc limit 5)