比如说我有一张桌子:
Table: Message
| data | likes | dislikes |
我怎样才能有效地找到喜欢和不喜欢最多的行,即最有争议的行。所以对于下面的例子:
{("Hello", 10, 5)
("Ola!", 5, 5)
("Ni Hao!", 2, 2)
("Wazzup!", 5, 7)}
将选择“你好”。
任何帮助将不胜感激!
比如说我有一张桌子:
Table: Message
| data | likes | dislikes |
我怎样才能有效地找到喜欢和不喜欢最多的行,即最有争议的行。所以对于下面的例子:
{("Hello", 10, 5)
("Ola!", 5, 5)
("Ni Hao!", 2, 2)
("Wazzup!", 5, 7)}
将选择“你好”。
任何帮助将不胜感激!
GQL(假设您使用的是应用引擎数据存储)将无法对计算进行查询。
您需要在模型中添加另一个属性(例如,称为“争议”),并在每次更改喜欢或不喜欢的数量时计算它。然后,您可以对该其他属性进行简单查询(即按降序排列,然后获取前 N 条记录)。
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)
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
(首先按总和,然后按指标)