2009-08-11 8 views
13

मैं परिणाम खींच और गिनती प्रत्येक नाम के कितने खींच लिया जाता है लेकिन समूहीकरण के बिना करना चाहते हैं ... उदाहरण के लिएMySQL: समूहबद्ध किए बिना प्रविष्टियों की गणना करें?

मैं यह चाहता हूँ:

John Doe 3 
John Doe 3 
John Doe 3 
Mary Jane 2 
Mary Jane 2 
बजाय इस बात का

:

John Doe 3 
Mary Jane 2 

क्या इसका कोई मतलब है?

धन्यवाद। यह एक सबक्वेरी की आवश्यकता होगी:

+1

द्वारा एक समूह नहीं करने के लिए क्या कारण है? आप उस तालिका पर क्वेरी द्वारा समूह के साथ अपनी मूल तालिका में शामिल होने से इच्छित आउटपुट प्राप्त कर सकते हैं। – pjp

+1

pjp - मुझे नहीं लगता कि उसे 'ग्रुप बाय' का उपयोग करने में कोई समस्या है, वह सिर्फ अंतिम आउटपुट समूह नहीं चाहता था। –

+0

हां लकीलिंडी सही है। –

उत्तर

10
SELECT b.name, a.the_count 
FROM 
    some_table b, 
    (SELECT name, COUNT(*) AS the_count 
    FROM some_table 
    GROUP BY name) AS a 
WHERE b.name = a.name 
+0

मेरे उत्तर के समान - लेकिन मैं अपनी टेबल नामकरण पसंद करता हूं :) – pjp

+1

हाहा, हाँ ... some_table और ए/बी बहुत वर्णनात्मक नहीं हैं;) –

2
SELECT mo.*, 
     (
     SELECT COUNT(*) 
     FROM mytable mi 
     WHERE mi.name = mo.name 
     ) 
FROM mytable mo 
+0

'मो चयन करें। *, ( COUNT का चयन करें (*) mytable मील से कहां mi.name = mo.name और 1 = 1 और 2 = 2 और 3 = 3 ) mytable मो कहां mi.name से = mo.name और 1 = 1 और 2 = 2 और 3 = 3' DRY का उल्लंघन करता है। 'कहां' खंड दोहराने के बिना हम इसे कैसे कर सकते हैं? – Pacerier

+0

@Pacerier: एक अस्थायी तालिका बनाएं और पहले वहां परिणाम लिखें। अन्य प्रणालियों में हम एक सीटीई लिख सकते हैं, लेकिन MySQL उन्हें समर्थन नहीं देता है। – Quassnoi

+0

अस्थायी सारणी हालांकि एक अच्छा समाधान है? क्या हमें कर्सर का उपयोग नहीं करना चाहिए? – Pacerier

0
SELECT `name`, 
    (
     SELECT COUNT(*) 
     FROM `table` AS `alt` 
     WHERE `alt`.`name` = `table`.`name` 
    ) AS `num` 
FROM `table` 
2

आप एक सबक्वेरी का उपयोग नहीं करना चाहते हैं, आप भी तालिका में ही की तरह तो शामिल हो सकते हैं। इस तरह शायद कुछ:

SELECT t1.name, COUNT(t2.name) 
FROM my_table AS t1 
INNER JOIN my_table AS t2 ON (t1.primary_key_field = t2.primary_key_field) 
WHERE some_conditions 
GROUP BY t1.name 
2

यह group by उपयोग करता है लेकिन प्रारूप आप चाहते हैं में उत्पादन हो जाता है।

SELECT Name, NG.NameCount 
FROM Names 
INNER JOIN 
    (SELECT Name, Count(1) As NameCount 
    FROM Names 
    GROUP BY Name) NG 
ON Names.Name = NG.Name 
संबंधित मुद्दे