私は次の表を持っています:
ID | NUM
1 | 4
2 | 9
3 | 1
4 | 7
5 | 10
次の結果が必要です。
ID | NUM
5 | 10
MAX(NUM)を使用しようとすると、MAX関数を使用するためにGROUPBYを使用する必要があるというエラーが発生します。
何か案が?
私は次の表を持っています:
ID | NUM
1 | 4
2 | 9
3 | 1
4 | 7
5 | 10
次の結果が必要です。
ID | NUM
5 | 10
MAX(NUM)を使用しようとすると、MAX関数を使用するためにGROUPBYを使用する必要があるというエラーが発生します。
何か案が?
エラーのとおり、選択リストに非集計列がある場合、のような集計を使用するにMax
は句が必要です(この場合、を検索して、列に関連付けられている値を返そうとしています)。MS SQL Serverでは、返される行を並べ替えて制限することで、必要なものを取得できます。Group By
MAX(Num)
ID
SELECT TOP 1 ID, NUM
FROM [table]
ORDER BY NUM DESC;
他のRDBMSシステムでは、LIMIT
は同様の機能を提供します。
編集
同じ最大値を持つすべての行を返す必要がある場合は、WITH TIES
修飾を使用します。
SELECT TOP 1 WITH TIES ID, NUM
FROM [table]
ORDER BY NUM DESC;
複数の結果を返す可能性があります:
SELECT id, num
FROM table
WHERE num = (SELECT MAX(num) FROM table)
このクエリを試してください。
WITH result AS
(
select DENSE_RANK() OVER( ORDER BY NUM desc) AS RowNo,ID,NUM from #emp
)
select ID,NUM from result where RowNo=1
次のようなMAX値がさらにある場合でも、max値を返します。
ID | NUM
5 | 10
6 | 10
ランキング関数の詳細については、以下のリンクを参照してください:http:
//msdn.microsoft.com/en-us/library/ms189798
どうですか:
SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC;
これを行う -
SELECT TOP 1 ID,
NUM
FROM <yourtable>
ORDER BY NUM DESC;
すべての行に最大値がありますが、3つの選択があります。パフォーマンスには良くありません。
SELECT id, MAX(num) as num
FROM table
GROUP BY id
ORDER BY MAX(num) DESC
LIMIT (SELECT COUNT(*)
FROM table
WHERE num =(SELECT MAX(num) FROM table)
)