मैं वर्तमान में अपने पोस्टग्रेज डीबी में पूर्व-पंजीकृत उपयोगकर्ताओं की निश्चित मात्रा का प्रतिशत खोजने की कोशिश कर रहा हूं, ऑपरेशन (1185 * 100) / 3104 = 38.17 होगा। ऐसा करने के लिए मैं प्रत्येक गिनती को पुनः प्राप्त करने के लिए दो चुनिंदा बयानों का उपयोग कर रहा हूं, लेकिन मैं उनके बीच काम करने में असमर्थ रहा हूं:

+ count +
-  1185 -
-  3104 -

यह वही है जो मेरे पास है:

select
    count(*)
    from crm_user_preregistred
    left join crm_player on crm_user_preregistred."document" = crm_player."document" 
    left join crm_user on crm_player.user_id = crm_user.id
    where crm_user.email is not null
union all
select
    count(*)
    from crm_user_preregistred

किसी भी संकेत या मदद के लिए अग्रिम धन्यवाद।

1
Iván Herrera 24 नवम्बर 2020, 10:25

2 जवाब

सबसे बढ़िया उत्तर

आप अपने चयन को सरल बनाने के लिए क्लॉज के साथ कुछ का उपयोग कर सकते हैं, अपने गिनती (*) के साथ मूल्यों को प्रतिस्थापित कर सकते हैं, शायद कुछ परिणाम के लिए तैयार हो सकते हैं, और मूल्य 2 पर 0 के लिए एक चेक

with temp_value1 as (
   select 1185 as value1 ),
temp_value2 as (
select 3104 as value2 )

select (select temp_value1.value1::float * 100  from temp_value1) /
(select temp_value2.value2::float from temp_value2)

परिणाम : 38.17654639175258

अपने चयन के साथ:

with temp_value1 as (
select
    count(*) as value1
    from crm_user_preregistred
    left join crm_player on crm_user_preregistred."document" = crm_player."document" 
    left join crm_user on crm_player.user_id = crm_user.id
    where crm_user.email is not null
),
temp_value2 as (
select
    count(*) as value2
    from crm_user_preregistred
)

select (select temp_value1.value1::float * 100  from temp_value1)  / (select temp_value2.value2::float from temp_value2)
1
FatFreddy 24 नवम्बर 2020, 10:59

आप इसे एक प्रश्न में कर सकते हैं:

select count(*) filter (where cu.email is not null) * 100.0 / max(cup.cnt)
from (select cup.*, count(*) over () as cnt
      from crm_user_preregistred cup
     ) cup left join
     crm_player cp
     on cup."document" = cp."document" left join
     crm_user cu
     on cp.user_id = cu.id
where cu.email is not null;

मुझे संदेह है कि क्वेरी को और सरल बनाया जा सकता है, लेकिन आपके डेटा मॉडल को जाने बिना, विशिष्ट सुझाव देना कठिन है।

1
Gordon Linoff 24 नवम्बर 2020, 16:33