2012-04-11 9 views
4

私は、常に存在する場合は最大値になる値を除いて、特定の列から最大整数を取得したいと考えています。データは以下のようになります。上記でMAX intを取得する方法はありますが、特定のintを除外する方法はありますか?

score, empid 
1  3 
3  3 
10  3 
1  5 
2  5 
1  8 
2  8 
3  8 
10  8 

を、私はMAXが、それは10の結果は次のようになります持ち帰るますので、10未満MAX(スコア)が、この場合には動作しませんスコアたいと思いますこの:

score, empid 
3  3 
2  5 
3  8 

何か提案がありますか?ここで

答えて

7
select max(score) , empid 
from table 
where score < (select max(score) from table) 
group by empid 
8

は別の方法です:

SELECT 
    MAX(CASE WHEN score = 10 THEN NULL ELSE score END) AS [max_score], 
    empid 
FROM 
    table 
GROUP BY 
    empid 

あなたは、サブ選択を避けることを好む場合、これは好ましいかもしれません。

0

Ben Englishのanswerに従うと、1つの値だけを除外している場合は、少ない入力にNULLIFを使用することもできます。

SELECT MAX(NULLIF(score, 10)), ... 
FROM ... 
GROUP BY ... 

CASE WHENでは、ある範囲の値を除外することができます。ここでは、10以上のすべての項目を見る除外する:

SELECT MAX(IIF(score > 10, NULL, score)), ... 
FROM ... 
GROUP BY ... 

SELECT MAX(CASE WHEN score > 10 THEN NULL ELSE score), ... 
FROM ... 
GROUP BY ... 

そして、ここではあまりタイピングのためのIIFバージョンがあります