2009-03-15 11 views
15

SQLite संस्करण 3.4.0 कुल कार्यों के साथ क्या गलत है? इसके अतिरिक्त, मुझे संदेह है कि ऑर्डर बी भी काम नहीं करेगा। इसे फिर से लिखना कैसे है?एसक्यूएल त्रुटि: कुल

sqlite> SELECT p1.domain_id, p2.domain_id, COUNT(p1.domain_id) AS d1, COUNT(p2.domain_id) AS d2 
    ...> FROM PDB as p1, Interacting_PDBs as i1, PDB as p2, Interacting_PDBs as i2 
    ...> WHERE p1.id = i1.PDB_first_id 
    ...> AND p2.id = i2.PDB_second_id 
    ...> AND i1.id = i2.id 
    ...> AND d1>100 
    ...> AND d2>100 
    ...> ORDER BY d1, d2; 
SQL error: misuse of aggregate: 
sqlite> 

उत्तर

55

एक समग्र समारोह का उपयोग करते समय (राशि/गिनती/...), आप भी GROUP BY क्लॉज़ का उपयोग करने के लिए है।

इसके बाद, जब आप कुल के परिणाम पर फ़िल्टर करना चाहते हैं, तो आप WHERE खंड में ऐसा नहीं कर सकते हैं, लेकिन आपको इसे हैविंग क्लॉज में करना है।

SELECT p1.domain_id, p2.domain_id, COUNT(p1.domain_id) AS d1, COUNT(p2.domain_id) AS d2 
    FROM PDB as p1, Interacting_PDBs as i1, PDB as p2, Interacting_PDBs as i2 
    WHERE p1.id = i1.PDB_first_id 
    AND p2.id = i2.PDB_second_id 
    AND i1.id = i2.id 
GROUP BY p1.domain_Id, p2.domain_Id 
HAVING d1 > 100 AND d2 > 100 
ORDER BY d1, d2; 
+3

+1 मुझे लगता है कि उचित ग्रुप बाय क्लॉज के बिना कुल कार्यों का उपयोग MySQL से खराब बुरी आदतों में निहित है ... – Tomalak

+1

इस उत्तर ने मुझे वाक्यविन्यास को याद रखने की कोशिश करने में कई मिनट बचाए, और यह आसान हो गया स्पष्टीकरण समझो। चीयर्स @ फ्रेडरिक – OptimizePrime

+0

मेरे लिए कॉलम फ़िल्टर नहीं कर रहा है! –

2

इस के लिए लघु संस्करण ठीक है:

आप COUNT/SUM की तरह समारोह का उपयोग कर रहे हैं, तो आप HAVING बजाय WHERE उपयोग करने के लिए की जरूरत है।

संबंधित मुद्दे