1

比如说我有一张桌子:

Table: Message
| data | likes | dislikes |

我怎样才能有效地找到喜欢和不喜欢最多的行,即最有争议的行。所以对于下面的例子:

{("Hello", 10, 5)
("Ola!", 5, 5)
("Ni Hao!", 2, 2)
("Wazzup!", 5, 7)}

将选择“你好”。

任何帮助将不胜感激!

4

3 回答 3

2

GQL(假设您使用的是应用引擎数据存储)将无法对计算进行查询。

您需要在模型中添加另一个属性(例如,称为“争议”),并在每次更改喜欢或不喜欢的数量时计算它。然后,您可以对该其他属性进行简单查询(即按降序排列,然后获取前 N 条记录)。

于 2011-02-17T02:33:45.393 回答
1

1) 您可能想要使用其他一些指标而不是abs(likes - dislikes). 在这种情况下,(0, 5)同样(100, 105)会引起争议。
我认为,likes*dislikes可能在你的条件下工作。

2)我不确定jdoql,但是由于您指定了 sql 标记,因此在标准 sql 中,这可以在不排序的情况下完成。就像是

select * from Message 
    where likes*dislikes = (select max(likes*dislikes) from Message)
于 2011-02-17T00:30:54.503 回答
0
select top 1 (likes+dislikes ) as sumOfLikesDislikes from Message 
order by sumOfLikesDislikes desc

正如 Nikita 所建议的,您可以根据需要使用 (likes*dislikes) 作为 LikesTimesDislikes (用于指标)。

你甚至可以两者都做:

select top 1 (likes+dislikes ) as sumOfLikesDislikes, 
             (likes*dislikes ) as LikesTimesDislikes  
from Message 
order by sumOfLikesDislikes desc, LikesTimesDislikes   desc

(首先按总和,然后按指标)

于 2011-02-17T07:38:25.340 回答