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 に答える