0
with baseQuery as(
select id,
(select sum(calories) from dailytable where user_id in (select user_id from group_members where group_id=132 and status = 'accepted' and user_id=users.id)) as total_calories
from users where id in (select user_id from group_members where group_id=132 and status='accepted'))
select *,dense_rank() over(order by total_calories desc nulls last) as rank
from baseQuery;
これは私のクエリと出力です。結果セットから特定の行のランクを抽出する方法
id total_calorie rank
121 2516.054250000001 1
25 897.0234000000002 2
120 784.13784 3
上記のクエリの条件はそれが1ではなく3
どのように私はこの問題を解決することができるよう、ランクを返している場合、私は入れていたとき、私は、ユーザID 120の唯一のランクを取得したいけど?
おかげで助けを求めて、それは私の要件ごとに動作します。 –
あなたは2つの場所でユーザIDをフィルタリングする繰り返し条件があるので、おそらくクエリを少し簡略化できますが、内側のものが外側に関連付けられているため、少なくとも1つは冗長であり、削除することができます。 – jpw