2011-09-30 10 views
8

SQLでは、非集計の最小/最大演算子がありますか

select max(val,0) 
from table 

私はテーブル全体の最大値を探しているわけではありません。

このより簡単な方法が必要ですか?

select case when val > 0 then val else 0 end 
from table 

編集:Microsoft SQL Server

を使用しています。
+0

何の実装に合わせて他の質問で提案されているスカラーUDFを回避しますか? – JNK

+0

Fortranでは、MAX(a、b、...)が必要なことをしました。 SQLでは、一部の方言は 'LARGER'や' SMALLER'や 'LARGEST'や' SMALLEST'などの関数をサポートしています。 AFAIKタスクの標準機能はありません。 –

+0

恐ろしいNULLに注意してください。 'val is 0 THEN val ELSE 0 END'(0がヌルでないことが分かっている場合)または 'val1がNULLの場合はval2 val2がNULLの場合THEN 'MAX(val1、val2)'の場合val1> val2 THEN val1 ELSE val2 END'となります。 –

答えて

9

機能GREATESTLEASTを使用していますSQL標準ではありませんが、多くのRDBMS(例えば、Postgresqlの)です。だから、

自体SQL
SELECT GREATEST(val, 0) FROM mytable; 
+0

ありがとう、upvoted。私はMicrosoft SQL Serverを実行しています。だから、それらは存在しないように見える:(。 – Colin

1

ありません。しかし、多くのデータベースエンジンは、SQL文で使用できる一連の関数を定義しています。残念ながら、彼らは一般的に異なる名前と議論のリストを使用します。

MySQLでは、この関数はGREATESTです。 SQLiteではMAXです(1つのパラメータ以上では動作しません)。

-3

あなたがSQLに持っているものは、有効なSQLでさえありません。これはMAXでのSQLの動作ではありません。 T-SQLでは、MAXは最大値を返す範囲で集計されます。あなたが望むのは、単に2つの価値があるということです。

詳細はこれを読む:それJOINのベースセットしてください

Is there a Max function in SQL Server that takes two values like Math.Max in .NET?

0

SELECT 
    max(val) 
FROM 
(
select val 
from table 
UNION ALL 
select 0 
) foo 

これは、SQLのより良い

関連する問題