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 回答