10

次の表があります。

 ItemID Price
    1   10
    2   20
    3   12
    4   10
    5   11

2 番目に低い価格を見つける必要があります。これまでのところ、機能するクエリがありますが、それが最も効率的なクエリかどうかはわかりません。

select min(price)
from table
where itemid not in
(select itemid
from table
where price=
(select min(price)
from table));

3 番目または 4 番目の最低価格を見つけなければならない場合はどうすればよいですか? 他の属性や条件については言及していません...これを行うより効率的な方法はありますか?

PS: 最小値は一意の値ではないことに注意してください。たとえば、項目 1 と 4 は両方とも最小値です。単純な注文ではうまくいきません。

4

9 に答える 9

4
select price from table where price in (
    select 
        distinct price 
    from 
    (select t.price,rownumber() over () as rownum from table t) as x 
    where x.rownum = 2 --or 3, 4, 5, etc
)
于 2013-06-08T00:52:57.483 に答える
3

これが最速かどうかはわかりませんが、2 番目、3 番目などを選択しやすくなります。TOP の値を変更するだけです。

更新しました

SELECT MIN(price)
FROM table
WHERE price NOT IN (SELECT DISTINCT TOP 1 price FROM table ORDER BY price)
于 2013-06-08T01:00:23.837 に答える
1

従業員の 2 番目の最低給与を調べるには、次を使用できます。

select min(salary) 
from table 
where salary > (select min(salary) from table);
于 2021-10-14T14:19:41.050 に答える
0

を使用できますRANK functions。複雑なクエリのように見えるかもしれませんが、他の回答と同様の結果が同じで達成できます。

WITH Temp_table AS (SELECT ITEM_ID,PRICE,RANK() OVER (ORDER BY PRICE) AS 
Rnk 
FROM YOUR_TABLE_NAME)
SELECT ITEM_ID FROM Temp_table
WHERE Rnk=2;
于 2021-10-14T14:52:36.680 に答える