4

特定の列から最大整数を取得したいのですが、存在する場合は常に最大になる値を除きます。データは次のようになります。

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

上記では、MAXスコアを10未満にしたいと思います。この場合、MAX(スコア)は10に戻るため、機能しません。結果は次のようになります。

score, empid
 3       3
 2       5
 3       8

助言がありますか?

4

3 に答える 3

9

別の方法は次のとおりです。

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

副選択を避けたい場合は、これが望ましい場合があります。

于 2012-04-11T18:34:06.183 に答える
7
select max(score) , empid
from table
where score < (select max(score) from table )
group by empid
于 2012-04-11T18:22:36.933 に答える
0

ベンイングリッシュの答えに従って、1つの値のみを除外する場合は、入力を減らすためにNULLIFを使用することもできます。

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

CASE WHEN値の範囲を除外することが可能です。ここでは、10を超えるすべてのスコアを除外します。

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

そして、これIIFがタイピングを減らすためのバージョンです:

SELECT MAX(IIF(score > 10, NULL, score)), ...
FROM ...
GROUP BY ...
于 2017-10-06T06:07:35.997 に答える