たとえば、テーブルがあるとします。
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
(最初に合計で、次にメトリックで)