2012-02-24 9 views
6

में आइटम की बहुतायत का चयन करें I कई चयन कर रहा हूं और ओवरलैप की गणना करना चाहता हूं। उदाहरण:एसक्यूएल

SELECT id FROM foo WHERE ... 
SELECT id FROM bar WHERE ... 
SELECT id FROM baz WHERE ... 

क्रमशः इन प्रश्नों को ए, बी, और सी पर कॉल करें। मान लीजिए कि एक देता है (1,2,3,4,5), बी देता है (1,3,5), और सी देता है (4,5,6)। मैं इनका संघ लेना चाहता हूं और गुणों की गिनती करना चाहता हूं। ऊपर दिए गए उदाहरण के लिए, परिणाम मैं देख रहा हूं

id | multiplicity 
----------------- 
1 | 2 
2 | 1 
3 | 2 
4 | 2 
5 | 3 
6 | 1 

मैं इसे एक प्रश्न के भीतर MySQL5 में कैसे कर सकता हूं? (ए, बी, और सी भागों सादा चयन या संग्रहित प्रक्रिया हो सकती है)।

+0

क्या आप तय कर दी है है तालिकाओं की मात्रा, और प्रविष्टियां या वे भिन्न हो सकते हैं? आप प्रत्येक लापता आईडी को 0 के साथ प्रतिस्थापित कर सकते हैं और फिर पहले, दूसरे, तीसरे तत्व इत्यादि को जोड़ सकते हैं ... Althought एक सुरुचिपूर्ण समाधान नहीं है – Andrew

+0

मुझे बहुतायत पसंद है ... – Ben

उत्तर

7

मैं इस समय इस की पुष्टि नहीं कर सकते हैं, लेकिन मेरा मानना ​​है कि इस

SELECT id, count(id) AS multiplicity 
FROM 
(
    SELECT id FROM foo WHERE ... 
    UNION ALL 
    SELECT id FROM bar WHERE ... 
    UNION ALL 
    SELECT id FROM baz WHERE ... 
) AS TablesTogether 
GROUP BY id 
+0

धन्यवाद। क्या आप जानते हैं कि मैं इस पर वजन जोड़ सकता हूं, उदा। 'बाज़' पर 3 के वजन के साथ मेरा उदाहरण 'id = 5, गुणांक = 5; आईडी = 6, गुणक = 3' के साथ समाप्त होगा? – spraff

+0

कुछ इस तरह: चयन आईडी, योग (fullcount) के रूप में बहुलता से ( चयन आईडी, ((आईडी) * वजन) #foo समूह से ID द्वारा गिनती fullcount के रूप में, वजन यूनिअन सभी चयन आईडी, (गिनती (आईडी) * वज़न) आईडी द्वारा #bar समूह से पूर्ण गणना के रूप में, वजन यूनियन सभी आईडी आईडी, वजन से पूर्ण गणना के रूप में चयन आईडी, (गिनती (आईडी) * वजन) AS टेबल्स के साथ आईडी द्वारा समूह –

0

काम करेंगे यहाँ भारित समाधान (weight_Foo और weight_Bar स्थिरांक हैं) के एक फ़ॉर्मेट संस्करण

SELECT id, sum(fullcount) AS multiplicity 
FROM (
    SELECT id, weight_Foo as fullcount FROM Foo WHERE ... 
    UNION ALL 
    SELECT id, weight_Bar as fullcount FROM Bar WHERE ... 
) AS TemporaryTableName 
GROUP BY id