2012-11-14 8 views
5

होने से एक मूल्य पर प्रोजेक्ट करना मैं पहले से माफी माँगता हूँ के बाद से मैं कुछ हद तक तो SQL करने के लिए अपने कोड लग सकता है जैसे कि यह सब पर कोई मतलब नहीं है नया हूँ, लेकिन मैं के रूप में मैं कर सकते हैं इसके बारे में के रूप में ज्यादा समझ बनाने के लिए और उम्मीद है कि कोशिश करेंगे आप अधिक अनुभवी लोग मेरी मदद कर सकते हैं। मुझे यकीन नहीं है कि यह मदद करेगा, लेकिन मैं ओरेकल डेटाबेस का उपयोग कर रहा हूं।खण्ड अभिव्यक्ति

मैं दो तालिकाओं है: - यह एक elementID शामिल करने के साथ ही एक elementName क्षेत्र
एक्सचेंजों -

तत्वों यह एक exchangeID और एक elementID क्षेत्र

शामिल

मैं केवल eleme पुनः प्राप्त करने के क्रम में निम्न क्वेरी बनाया एनटीएस कि एक्सचेंजों के 50% से अधिक में होते हैं:

SELECT e.elementName 
FROM Elements e 
WHERE e.elemID in 
(SELECT elemID FROM Exchanges 
GROUP BY elemID 
HAVING (count(*)/(SELECT count(*) FROM 
(SELECT exchangeID, count(*) FROM Exchanges GROUP BY exchangeID))) > 0.5); 

यह हिस्सा ठीक काम कर रहा है, लेकिन मैं यह भी आदान-प्रदान में प्रत्येक आइटम के लिए घटनाओं की% पुनः प्राप्त करने की जरूरत है। इसलिए, उदाहरण के लिए, यदि कोई तत्व ए 76% एक्सचेंजों में होता है और 5 बी एक्सचेंजों में एक तत्व बी होता है, तो मैं ए और 76% के साथ एक पंक्ति और बी और 59% के साथ एक और पंक्ति वापस करना चाहता हूं। मेरे मन में, इसका मतलब यह होगा किसी भी तरह HAVING क्लॉज़ की बाईं ओर अभिव्यक्ति का परिणाम हो रही है:

(count(*)/(SELECT count(*) FROM 
(SELECT exchangeID, count(*) FROM Exchanges GROUP BY exchangeID))) 

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

वहाँ इतना है कि मैं मूल्य मैं देख रहा हूँ प्राप्त कर सकते हैं यह मान मेरा चयन करने के लिए प्रचार करने के लिए कोई तरीका है?

उत्तर

2

आप दो व्युत्पन्न टेबल-समेकित पूर्व (1) एक्सचेंजों प्रति-तत्व, और (2) एक्सचेंजों की कुल संख्या चाहते हैं। बाकी प्राथमिक हो जाते हैं।

SELECT x.elementName, A.elemExchanges/B.totalExchanges Percentage 
     FROM 
(
    SELECT x.elemID, 
      count(distinct x.exchangeID) elemExchanges 
     FROM Exchanges x 
    GROUP BY x.elemID 
) A 
CROSS JOIN 
(
    SELECT COUNT(distinct y.exchangeID) totalExchanges 
     FROM Exchanges y 
) B 
     JOIN Elements e on e.elemID = A.elemID 
    WHERE A.elemExchanges/B.totalExchanges > 0.5; 
संबंधित मुद्दे