मेरे पास 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
0
Hari Shankar 3 मार्च 2019, 06:47

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
1
Fahmi 3 मार्च 2019, 03:56