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

एकल कॉलम पर रेटिंग की गणना करने के लिए कॉम्प्लेक्स एसक्यूएल का चयन करें

विचार योग की गणना करने के लिए एक सबक्वायरी का उपयोग करना है, फिर गणना करें और मानों को एक अल्पविराम-सीमांकित कॉलम में रखें, जिसे आप php में एक सरणी में बदल सकते हैं:

select v.ip, group_concat(v.visits / iv.maxvisits) as ratings
from visit v join
     (SELECT ip, id, visits, max(visits) as maxvisits
      FROM visit
      GROUP BY ip
     ) iv
     on v.ip = iv.ip
group by v.ip;

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

एसक्यूएल में टेबल्स स्वाभाविक रूप से अनियंत्रित हैं और एसक्यूएल में सॉर्टिंग स्थिर नहीं है (जिसका अर्थ है कि मूल ऑर्डर संरक्षित नहीं है)। आप group_concat() . में एक आदेश निर्दिष्ट कर सकते हैं बयान। उदाहरण के लिए, निम्नलिखित id के अनुसार परिणामों को क्रमित करेंगे :

select v.ip, group_concat(v.visits / iv.maxvisits order by id) as ratings
from visit v join
     (SELECT ip, id, visits, max(visits) as maxvisits
      FROM visit
      GROUP BY ip
     ) iv
     on v.ip = iv.ip
group by v.ip;

और यह सबसे पहले उच्चतम रेटिंग द्वारा क्रमित होगा:

रेटिंग के रूप में
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings

id . को शामिल करने के लिए आप सूची को और अधिक जटिल बना सकते हैं इसमें भी:

रेटिंग के रूप में
select v.ip,
      group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका प्राप्त करना त्रुटि मौजूद नहीं है, लेकिन तालिका मौजूद है (ActiveRecord ::StatementInvalid Mysql2 ::त्रुटि:तालिका मौजूद नहीं है)

  2. जावा MySQL ट्रिगर द्वारा चलाया जाता है

  3. आईओएस अक्षांश और देशांतर के लिए PHP क्वेरी एक एक्सएमएल आउटपुट के साथ पास के MySQL lat और lon की खोज नहीं कर रही है

  4. जरूरत पड़ने पर ही पीडीओ से ऑटो कनेक्ट हो रहा है

  5. मैं आरंभिक वर्णों की श्रेणी के आधार पर कैसे चयन करूं?