比方说,我有一张桌子:
Table: Message
| data | likes | dislikes |
我如何有效地找到喜欢和喜欢最多的行,即最有争议的行。因此,对于以下示例:
{("Hello", 10, 5)
("Ola!", 5, 5)
("Ni Hao!", 2, 2)
("Wazzup!", 5, 7)}
将选择“你好”。
任何帮助都将受到高度赞赏!
答案 0 :(得分:2)
GQL(假设您正在使用应用引擎数据存储区)将无法对计算进行查询。
您需要在模型中添加另一个属性(例如称为“争议”),并在每次更改喜欢或不喜欢的数量时计算它。然后你可以对其他属性做一个简单的查询(即按降序排列,然后获取前N个记录)。
答案 1 :(得分: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)
答案 2 :(得分:0)
select top 1 (likes+dislikes ) as sumOfLikesDislikes from Message
order by sumOfLikesDislikes desc
根据Nikita的建议,如果你愿意,你可以使用(喜欢*不喜欢)LikesTimesDislikes(用于指标)。
你甚至可以做到这两点:
select top 1 (likes+dislikes ) as sumOfLikesDislikes,
(likes*dislikes ) as LikesTimesDislikes
from Message
order by sumOfLikesDislikes desc, LikesTimesDislikes desc
(首先是总和,然后是指标)