मैं वर्तमान में अपने पोस्टग्रेज डीबी में पूर्व-पंजीकृत उपयोगकर्ताओं की निश्चित मात्रा का प्रतिशत खोजने की कोशिश कर रहा हूं, ऑपरेशन (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
किसी भी संकेत या मदद के लिए अग्रिम धन्यवाद।
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)
आप इसे एक प्रश्न में कर सकते हैं:
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;
मुझे संदेह है कि क्वेरी को और सरल बनाया जा सकता है, लेकिन आपके डेटा मॉडल को जाने बिना, विशिष्ट सुझाव देना कठिन है।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।