3

SQL Server の特定の列で n 個の最大数を見つけようとしています。

列の最大値と 2 番目に大きい値を簡単に見つけることができます。

しかし、どうすれば、列内の 5 つの最大値を見つけることができますか?

4

3 に答える 3

3

これに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を参照してください

于 2012-10-03T09:44:37.953 に答える
2

[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

これが生きているデモです

于 2012-10-03T09:43:48.763 に答える
0

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)
于 2012-10-03T09:50:13.593 に答える