我有2张桌子,users
和games
。用户可以玩很多游戏。我需要所有users
谁有games
,以及他们的games_hosted
计数(games
列finished
到true
。
附:我需要在管理表中加载所有数据。因为游戏太多了。我决定对数据进行分页和限制。但即使限制以下查询也需要同时进行。如何以更好的方式查询?
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
你可以尝试下面 - 使用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