2011-09-26 11 views
5

में केवल एक बार दिखाई देने वाले मानों की संख्या प्राप्त करें, सबसे पहले, यदि यह प्रासंगिक है, तो मैं MySQL का उपयोग कर रहा हूं, हालांकि मुझे लगता है कि एक समाधान डीबी उत्पादों में काम करेगा। मेरी समस्या इस प्रकार है:कॉलम

मेरे पास एक कॉलम के साथ एक साधारण तालिका है। कॉलम पर कोई बाधा नहीं है। इस कॉलम के भीतर कुछ सरल डेटा है, उदा।

a 
a 
b 
c 
d 
d 

मुझे मूल्यों की संख्या/गिनती प्राप्त करने की आवश्यकता है जो केवल एक बार दिखाई दे। ऊपर दिए गए उदाहरण से 2 होगा (चूंकि केवल बी और सी कॉलम में एक बार होता है)।

उम्मीद है कि यह स्पष्ट है कि मैं DISTINCT मान नहीं चाहता, लेकिन अद्वितीय मूल्य। मैंने वास्तव में कॉलम पर एक अनन्य बाधा के साथ एक अतिरिक्त तालिका बनाकर और पुराने से नई तालिका में प्रवेश करके, डुप्लिकेट को तदनुसार संभालने से पहले यह किया है।

मैं ऐसे समाधान को ढूंढने की उम्मीद कर रहा था जिसके लिए अस्थायी तालिका की आवश्यकता नहीं थी, और किसी भी तरह से निफ्टी चयन के साथ पूरा किया जा सकता था।

+1

एल ओएल ने तीन समान उत्तर पर एक साथ पोस्ट किया। – ray

+0

आह - लेकिन कौन सबसे अच्छा था;) –

+0

इस बिंदु पर और प्रश्न को फिर से पढ़ने के बाद, मुझे लगता है कि रैंडी या रोमेन पुरस्कार लेते हैं, लेकिन आपके पास @ ह्यूग जोन्स: डी – ray

उत्तर

14

मान लिया जाये कि T कहा जाता है और अपने क्षेत्र F कहा जाता है:

SELECT COUNT(F) 
FROM (
    SELECT F 
    FROM T 
    GROUP BY F 
    HAVING COUNT(*) = 1 
) AS ONLY_ONCE 
+1

मेरे पैसे के लिए - यह सबसे अच्छा जवाब है। –

+0

बहुत धन्यवाद। अच्छी तरह से काम। – BoomShaka

3
select field1, count(field1) from my_table group by field1 having count(field1) = 1 

select count(*) from (select field1, count(field1) from my_table group by field1 having count(field1) = 1) 

पहला व्यक्ति अनूठे लोगों को वापस कर देगा और दूसरा अद्वितीय तत्वों की संख्या वापस कर देगा।

3
select count(*) from 
(
    select 
    col1, count(*) 
    from 
    Table 
    group by 
    Col1 
    Having 
    Count(Col1) = 1 
) 
+0

मुझे लगता है कि मेरा नया संस्करण सबसे अधिक मंच स्वतंत्र है –

3

यह इस रूप में सरल हो सकता है:

अपनी मेज
Select MyColumn From MyTable Group By MyColumn Where Count(MyColumn) = 1 
+0

आपको "विशिष्ट रूप से प्रतिनिधित्व" मानों की सूची देता है, लेकिन कहा गया मूल्यों की गणना नहीं (आप ' डी को लौटाए गए रिकॉर्ड्स की मात्रा को देखना होगा)। अच्छी भावना समग्र है, लेकिन सवाल का जवाब देने के लिए आवश्यक शीर्ष-स्तरीय गिनती की कमी है :) – Romain

+1

@ रोमेन ओह निश्चित ... तकनीकीताएं! समूह w/no upvotes में से केवल एक। यह फिर से माध्यमिक विद्यालय जिम की तरह है। – ray

+1

मैं देखता हूं कि आपका क्या मतलब है ... इसलिए मैं यह सब हाइलाइट करने के बारे में था कि आपका जवाब वास्तव में अच्छा था ... और अगर मैंने पूरी तरह से प्रश्न का उत्तर दिया तो मैं अप-वोट कर दूंगा ... – Romain

3

सिर्फ घोंसला यह एक छोटे ...

select count(cnt) from 
(select count(mycol) cnt from mytab group by mycol) 
where cnt = 1 
+0

पोस्टर, मुझे लगता है, उसने काफी सवाल नहीं उठाया। यह उत्तर हमारे बाकी सभी लोगों की एक अलग व्याख्या को संबोधित करता है। –

+1

@ हूग - मैं असहमत हूं। मेरे लिए बहुत स्पष्ट लगता है "मुझे मूल्यों की संख्या/गिनती प्राप्त करने की आवश्यकता है जो केवल एक बार दिखाई दे। ऊपर दिए गए उदाहरण से 2 होगा" आपका जवाब बस गलत है। यह रोमैन के समान ही लौटाता है (हालांकि यह व्युत्पन्न तालिका के लिए उपनाम गायब है) –

+1

हां - मैंने सवाल फिर से पढ़ा है और यह संदिग्ध नहीं है, हालांकि, 'मैं उन विशिष्ट मूल्यों को नहीं चाहता हूं जिन्हें मैं अद्वितीय चाहता हूं' ने मुझे गलत तरीके से भेजा है। –