15

私は次の表を持っています:

ID | NUM
 1 |  4
 2 |  9
 3 |  1
 4 |  7
 5 |  10

次の結果が必要です。

ID | NUM
 5 | 10

MAX(NUM)を使用しようとすると、MAX関数を使用するためにGROUPBYを使用する必要があるというエラーが発生します。

何か案が?

4

6 に答える 6

14

エラーのとおり、選択リストに非集計列がある場合、のような集計を使用するにMaxは句が必要です(この場合、を検索して、列に関連付けられている値を返そうとしています)。MS SQL Serverでは、返される行を並べ替えて制限することで、必要なものを取得できます。Group ByMAX(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;
于 2012-06-17T17:34:47.333 に答える
8

複数の結果を返す可能性があります:

SELECT id, num
  FROM table
  WHERE num = (SELECT MAX(num) FROM table)
于 2012-06-17T17:31:24.963 に答える
5

このクエリを試してください。

    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

于 2012-06-18T03:38:17.190 に答える
2

どうですか:

SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC;
于 2012-06-17T17:29:02.800 に答える
1

これを行う -

SELECT TOP 1 ID,
       NUM
FROM <yourtable>
ORDER BY NUM DESC;
于 2012-06-17T17:29:46.187 に答える
0

すべての行に最大値がありますが、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)
       )
于 2013-06-20T17:36:43.063 に答える