2011-12-30 11 views
5

मेरे पास एक MySQL क्वेरी है जो एक संक्षिप्त ऑपरेशन चलाती है (एक चयन कथन में गणना को पूरा करती है) और मैं गणित ऑपरेशन करने के लिए परिणाम का उपयोग करना चाहता हूं, लेकिन मुझे एक त्रुटि मिल रही है।MySQL चयनित क्वेरी में उत्पन्न कॉलम का उपयोग

तालिका:

id | group | count | 
----------------------------- 
1  1   3 
2  1   2 

क्वेरी: तालिका में कोई वास्तविक "कुल" स्तंभ है क्योंकि वहाँ

select id, count, 
    (select sum(count) from table group by group) as total, 
    count/total as percent 
from table 

त्रुटि है। मैं क्वेरी कैसे काम कर सकता हूं?

+1

आप किसी भी त्रुटि संदेश नहीं दे रहे हैं। – hakre

+1

इसके बारे में क्षमा करें! मैंने सोचा कि मैंने इसे अंतिम अनुच्छेद के साथ वर्णित किया है, लेकिन आधिकारिक तौर पर त्रुटि 'त्रुटि 1054 (42 एस 22) है:' फ़ील्ड सूची 'में अज्ञात कॉलम' कुल '' – MechEngineer

उत्तर

18

आप total को variable के रूप में सहेज सकते हैं, फिर विभाजन गणना में इसका उपयोग करें।

SELECT 
    `id`, `count`, 
    @total:=(SELECT sum(`count`) FROM `table` GROUP BY `group`) AS `total`, 
    `count`/@total AS `percent` 
FROM `table` 

नोट: GROUP MySQL में एक reserved word है। आप बैकटिक्स (`) में इसे (और अन्य सभी फ़ील्ड/टेबल नाम) संलग्न कर सकते हैं।

+0

BOOM, हमारे पास विजेता है! धन्यवाद, रॉकेट। – MechEngineer

+0

@MechEngineer: आपका स्वागत है। खुशी है कि मैं मदद कर सकता हूं :-) –

+3

MySQL दस्तावेज़ ऐसा करने के खिलाफ चेतावनी देता है। "एसईटी कथन के अलावा, एक सामान्य नियम के रूप में, आपको किसी उपयोगकर्ता चर के लिए कोई मान निर्दिष्ट नहीं करना चाहिए और उसी कथन के भीतर मान को पढ़ना चाहिए .... आपको परिणाम मिलने वाले परिणाम मिल सकते हैं, लेकिन इसकी गारंटी नहीं है।" Http://dev.mysql.com/doc/refman/5.7/en/user-variables.html देखें – PaulC

0

group mysql में एक आरक्षित शब्द है, के रूप में table है, आप इसे पसंद उपयोग करना चाहिए:

select id, count, (select sum(count) from `table` group by `group`) as total, count/total as percent from `table` 

अधिक जानकारी के लिए: MySQL Reserved Words

आप देखेंगे कि आप वास्तव में count उपयोग कर सकते हैं लेकिन मैं वैसे भी उद्धरण में सभी टेबल और कॉलम नाम डाल दूंगा।

0

आपकी समस्या यह है कि आंतरिक क्वेरी को प्रति पंक्ति 1 परिणाम उत्पन्न करने की आवश्यकता होती है, प्रत्येक समूह के लिए 1 नहीं। आप की तरह

where inner_table.group = outer_table.group

ताकि केवल एक ही परिणाम दिया जाता है आंतरिक क्वेरी कुछ कहने में एक जहां खंड जोड़ना चाहते हैं।

2

तुम भी एक चर शुरू करने के बिना यह कर सकते हैं:

select id, 
    count, 
    (select sum(count) from `table` group by `group`) as total, 
    (select count/total) as percent 
from `table`; 

का उत्पादन:

+------+-------+-------+---------+ 
| id | count | total | percent | 
+------+-------+-------+---------+ 
| 1 |  3 |  5 | 0.6000 | 
| 2 |  2 |  5 | 0.4000 | 
+------+-------+-------+---------+ 
2 rows in set (0.05 sec) 
संबंधित मुद्दे