Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्रतिशत की गणना कैसे करें?

यदि आप उन उपयोगकर्ताओं का अनुपात चाहते हैं जिन्होंने गतिविधि वाले लोगों से भुगतान किया है, तो बस प्रत्येक तालिका को अलग-अलग सारांशित करें:

select p.cnt / a.cnt
from (select count(distinct user_id) as cnt from activity a) a cross join
     (select count(distinct user_id) as cnt from payment) p;

संपादित करें:

आपको सीमा में सभी तिथियों वाली तालिका चाहिए। यही सबसे बड़ी समस्या है।

तब मैं अनुशंसा करूंगा:

SELECT d.dte,
       ( ( SELECT COUNT(DISTINCT p.user_id)
           FROM payments p
           WHERE p.payment_date >= d.dte and p.payment_date < d.dte + INTERVAL 1 DAY
          ) /
          NULLIF( (SELECT COUNT(DISTINCT a.user_id)
                   FROM activity a
                   WHERE a.login_time >= d.dte and p.login_time < d.dte + INTERVAL 1 DAY
                  ), 0
                 ) as ratio
FROM (SELECT date('2017-01-01') dte UNION ALL
      SELECT date('2017-01-02') dte UNION ALL
      SELECT date('2017-01-03') dte UNION ALL
      SELECT date('2017-01-04') dte UNION ALL
      SELECT date('2017-01-05') dte 
     ) d;

नोट:

  • यह लौटाता है NULL जिन दिनों कोई गतिविधि नहीं होती है। यह मेरे लिए 0 . से अधिक मायने रखता है ।
  • यह उन तिथियों पर तर्क का उपयोग करता है जो दिनांक और दिनांक/समय मान दोनों के लिए काम करती हैं।
  • तारीखों का तर्क एक इंडेक्स का उपयोग कर सकता है, जो इस प्रकार की क्वेरी के लिए महत्वपूर्ण हो सकता है।
  • मैं LEFT JOIN का उपयोग करने की अनुशंसा नहीं करता हूं एस। यह उस डेटा को गुणा करेगा जो क्वेरी को महंगा बना सकता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL स्क्रिप्ट के निष्पादन को रद्द करने का तरीका (शायद त्रुटि बढ़ाना)?

  2. जब mysql बदल गया हो तो पुशर को आमंत्रित करें

  3. मैं सिद्धांत 2 डीक्यूएल में DATE () का उपयोग कैसे कर सकता हूं?

  4. MySQL डेटाबेस में गैर-अंग्रेज़ी पाठ सम्मिलित करते समय JSP एन्कोडिंग

  5. कैसे Django ढांचे में एक विरासत डेटाबेस को संभालने के लिए