2017-03-14 16 views
1

私は、ユーザにタイプに応じて特定の範囲のID番号が割り当てられるユーザデータベースを持っています。例えば、役員は1〜100のIDを取得し、子供は1001〜3000のIDを取得し、親は3001〜7000のIDを取得します。*同じ列から複数の最大値を選択

最高の番号のリストを取得したいIDの各「セグメント」に対して使用します。

私はもちろん

SELECT MAX(Persons.Number) as Maximum FROM Persons 

を行うことによって、すべての最大数を取得し、このような3000以下の最大数を取得することができます

SELECT MAX(Persons.Number) as MaxChild FROM Persons WHERE Persons.Number<=3000 

を...しかし、どのように私は最高を得ることができます1000以下の最高数と3000以下の最高数などSELECT声明?


*これらの特性は他の場所でデータベースに保存されています。 ID番号の「バケット化は、」ちょうどそれが簡単に特定のユーザーがちょうどIF()を使う

答えて

2

に属し一見発見するための機能です:

SELECT 
MAX(IF(Persons.Number BETWEEN x AND y, Persons.Number, NULL)) AS max_range_x_y, 
MAX(IF(Persons.Number BETWEEN i AND j, Persons.Number, NULL)) AS max_range_i_j, ... 
FROM Persons; 

上のMySQLの構文です。 SQL Serverでは代わりにIIF()を使用することがあります。 (それはANSI-SQL規格だから)すべてのRDBMSで動作するはずです何

SELECT 
MAX(CASE WHEN Persons.Number BETWEEN x AND y THEN Persons.Number ELSE NULL END) AS max_range_x_y, 
MAX(CASE WHEN Persons.Number BETWEEN i AND j THEN Persons.Number ELSE NULL END) AS max_range_i_j, ... 
FROM Persons; 
+0

素晴らしいです! IFが私のために働かなかったので、あなたがあなたの答えを編集している間、私はGoogleがIIFを見つけるのを手助けしました(それは本当にMS SQLです)。 –

1
SELECT 
MAX(CASE WHEN id BETWEEN 1 and 100 THEN Number ELSE NULL END) as BoardMax, 
MAX(CASE WHEN ID BETWEEN 1001 and 3000 THEN Number ELSE null END) as ChildMax, 
MAX(CASE WHEN ID BETWEEN 3001 and 7000 THEN Number ELSE null END) as ParentMax 
from 
Persons 
関連する問題