2008-10-10 16 views
9

मैं एक बहु-तालिका क्वेरी, इस (सरलीकृत संस्करण) के लिए इसी तरहmysql में, क्या आप एक उपनाम को एक दूसरे से विभाजित कर सकते हैं?

SELECT columns, count(table2.rev_id) As rev_count, sum(table2.rev_rating) As sum_rev_rating 
FROM table1 
LEFT JOIN table2 
ON table1.dom_id = table2.rev_domain_from 
WHERE dom_lastreview != 0 AND rev_status = 1 
GROUP BY dom_url 
ORDER BY sum_rev_rating/rev_count DESC 

समस्या ORDER BY खंड में है। यह एक mysql त्रुटि को दिखाने के लिए कारण बनता है, जो इस प्रकार है:

संदर्भ 'sum_ rev_ रेटिंग' समर्थित नहीं (समूह समारोह के संदर्भ में)

उत्तर

14

आप उपनाम के साथ गणना करने के लिए सक्षम नहीं हैं। ऐसा करने का एक तरीका बस इसके द्वारा एक और उपनाम और आदेश बनाना होगा।

SELECT columns, count(table2.rev_id) As rev_count, sum(table2.rev_rating) As sum_rev_rating, sum(table2.rev_rating)/count(table2.rev_id) as avg_rev_rating 
FROM table1 
LEFT JOIN table2 
ON table1.dom_id = table2.rev_domain_from 
WHERE dom_lastreview != 0 AND rev_status = 1 
GROUP BY dom_url 
ORDER BY avg_rev_rating DESC 
+0

मैं AVG_RATING के रूप में sum_rev_rating/rev_count कर की कोशिश की है, लेकिन मैं एक ही परिणाम मिला है। मुझे लगता है कि आप उपनाम से उपनाम नहीं कर सकते हैं। आपकी विधि बेकार ढंग से काम किया! –

+0

आप चयन सूची में अन्य अभिव्यक्तियों में उपनाम का उपयोग नहीं कर सकते हैं। आप क्लोज़ द्वारा ग्रुप बाय, हैविंग और ऑर्डर में केवल उपनाम का उपयोग कर सकते हैं। –

1

मेरी mysql जंग लगी है, आप कोशिश कर सकते हैं

SELECT columns, count(table2.rev_id) As rev_count, 
    sum(table2.rev_rating) As sum_rev_rating, 
    sum(table2.rev_rating)/count(table2.rev_id) as rev_ratio 
FROM table1 
    LEFT JOIN table2ON table1.dom_id = table2.rev_domain_from 
WHERE dom_lastreview != 0 
AND rev_status = 1 
GROUP BY dom_url 
ORDER BY rev_Ratio DESC 

या

SELECT * from (
    SELECT columns, count(table2.rev_id) As rev_count, 
     sum(table2.rev_rating) As sum_rev_rating 
    FROM table1 
     LEFT JOIN table2ON table1.dom_id = table2.rev_domain_from 
    WHERE dom_lastreview != 0 
    AND rev_status = 1 
    GROUP BY dom_url 
) X 
ORDER BY X.sum_rev_rating/X.rev_count DESC 

या

SELECT * from (
    SELECT columns, count(table2.rev_id) As rev_count, 
     sum(table2.rev_rating) As sum_rev_rating, 
     sum(table2.rev_rating)/count(table2.rev_id) as rev_ratio 
    FROM table1 
     LEFT JOIN table2ON table1.dom_id = table2.rev_domain_from 
    WHERE dom_lastreview != 0 
    AND rev_status = 1 
    GROUP BY dom_url 
) X 
ORDER BY rev_Ratio DESC 
संबंधित मुद्दे