0

私は現在、このようなSQLのテーブルを持っています

PRODUCT_ID_1 PRODUCT_ID_2 SCORE
1            2            10
1            3            100
1            10           3000
2            10           10
3            35           100
3            2            1001

つまり、PRODUCT_ID_1,PRODUCT_ID_2 がこのテーブルの主キーです。

私がやりたいことは、このテーブルを使用して行を追加し、現在の行が PRODUCT_ID_1 の値の SCORE を最大化する行であるかどうかを判断することです。

つまり、私が取得したいのは次の表です。

PRODUCT_ID_1 PRODUCT_ID_2 SCORE  IS_MAX_SCORE_FOR_ID_1
1            2            10               0
1            3            100              0 
1            10           3000             1
2            10           10               1 
3            35           100              0
3            2            1001             1

新しいテーブルを作成せずに IS_MAX_SCORE_FOR_ID_1 列を計算してテーブルに挿入する方法を知りたいです。

4

2 に答える 2

2

あなたはこのように試すことができます...

Select PRODUCT_ID_1, PRODUCT_ID_2 ,SCORE,
(Case when b.Score=
(Select Max(a.Score) from TableName a where  a.PRODUCT_ID_1=b. PRODUCT_ID_1) 
then 1 else 0 End) as IS_MAX_SCORE_FOR_ID_1 
 from TableName b
于 2013-06-27T16:27:59.687 に答える
1

これにはウィンドウ関数を使用できます。

select product_id_1,
       product_id_2, 
       score, 
       case 
         when score = max(score) over (partition by product_id_1) then 1
         else 0
       end as is_max_score_for_id_1
from the_table
order by product_id_1;

(上記は ANSI SQL であり、最新の DBMS で実行する必要があります)

于 2013-06-27T16:28:07.950 に答える