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

प्रत्येक शब्द की आवृत्ति की गणना करें

ऐसा लगता है कि यह समाधान काम कर रहा है (इस पेज से लगभग शब्दशः चुरा लिया गया है ) इसके लिए एक auxiliary की आवश्यकता है तालिका, अनुक्रमिक संख्याओं से 1 से कम से कम अलग-अलग शब्दों की अपेक्षित संख्या से भरी हुई है। यह जांचना काफी महत्वपूर्ण है कि सहायक तालिका काफी बड़ी है, या परिणाम गलत होंगे (कोई त्रुटि नहीं दिखा रहा है)।

SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
    COUNT(*) AS frequency
FROM maintable 
JOIN auxiliary ON
    LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
    <> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;

SQL Fiddle

यह दृष्टिकोण उतना ही अक्षम है जितना कोई हो सकता है, क्योंकि यह किसी भी अनुक्रमणिका का उपयोग नहीं कर सकता है।

एक विकल्प के रूप में, मैं एक सांख्यिकी तालिका का उपयोग करूंगा जिसे मैं ट्रिगर्स के साथ अप-टू-डेट रखूंगा। शायद उपरोक्त के साथ आँकड़ों की तालिका को इनिशियलाइज़ करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. घातक त्रुटि:अपरिभाषित फ़ंक्शन पर कॉल करें mysqli_result ()

  2. MySQL:#1075 - गलत तालिका परिभाषा; ऑटोइनक्रिकमेंट बनाम दूसरी कुंजी?

  3. Laravel डेटाबेस स्कीमा में मध्यमब्लॉब

  4. PHP के साथ MySQL तालिका में डेटा साफ़ करें?

  5. PHP कनेक्शन विफल:SQLSTATE [HY000] [2002] कनेक्शन ने मना कर दिया