如何提高子查询性能?

问题描述 投票:0回答:1

我有2张桌子,usersgames。用户可以玩很多游戏。我需要所有users谁有games,以及他们的games_hosted计数(gamesfinishedtrue

附:我需要在管理表中加载所有数据。因为游戏太多了。我决定对数据进行分页和限制。但即使限制以下查询也需要同时进行。如何以更好的方式查询?

 select 
  distinct "uid", 
  "username", 
  (
    select 
      count(id) 
    from 
      games 
    where 
      state = 'finished' 
      and user_uid = users.uid
  ) as games_hosted 
from 
  "users" 
  inner join "games" on "games"."user_uid" = "users"."uid" 
where 
  "games"."state" in ('published', 'finished') 
  and "username" < 'HariShankar' 
order by 
  "username" desc 
limit 
  10
sql postgresql
1个回答
1
投票

你可以尝试下面 - 使用case when表达式

select "uid", "username", count(case when state = 'finished' then id end) as games_hosted 
from "users" inner join "games" 
on "games"."user_uid" = "users"."uid" 
where "games"."state" in ('published', 'finished') and "username" < 'HariShankar' 
group by "uid", "username"
order by "username" desc 
limit 10
© www.soinside.com 2019 - 2024. All rights reserved.