2009-08-11 12 views
13

Ich will Ergebnisse ziehen und zählen, wie viele von jedem Namen gezogen wird, aber ohne Gruppierung ...MySQL: Anzahl Einträge ohne Gruppierung?

zum Beispiel möchte ich dies:

John Doe 3 
John Doe 3 
John Doe 3 
Mary Jane 2 
Mary Jane 2 

statt dessen:

John Doe 3 
Mary Jane 2 

Ist das sinnvoll?

Danke.

+1

Was ist der Grund für die nicht durch eine Gruppe zu tun? Sie können die gewünschte Ausgabe erhalten, indem Sie Ihre ursprüngliche Tabelle mit einer Gruppe verknüpfen, indem Sie diese Tabelle abfragen. – pjp

+1

pjp - Ich glaube nicht, dass er ein Problem mit der Verwendung einer GROUP BY hatte, er wollte einfach nicht, dass die endgültige Ausgabe gruppiert wurde. –

+0

Ja LuckyLindy ist richtig. –

Antwort

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

Das gleiche wie meine Antwort - aber ich bevorzuge meine Tischnamen :) – pjp

+1

haha, yeah ... some_table und A/B sind nicht sehr beschreibend;) –

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

SELECT mo. *, ( SELECT COUNT (*) FROM Mytable mi WHERE mi.name = mo.name und 1 = 1 und 2 = 2 und 3 = 3 ) FROM Mytable mo WHERE mi.name = mo.name und 1 = 1 und 2 = 2 und 3 = 3 'verstößt gegen DRY. Wie können wir das tun, ohne die Wo-Klausel wiederholen zu müssen? – Pacerier

+0

@ Pacerier: Erstellen Sie eine temporäre Tabelle und schreiben Sie zuerst die Ergebnisse. In anderen Systemen könnten wir ein CTE schreiben, aber MySQL unterstützt sie nicht. – Quassnoi

+0

Sind temporäre Tabellen eine gute Lösung? Sollten wir nicht Cursor verwenden? – Pacerier

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

Wenn Sie eine Unterabfrage nicht verwenden möchten, können Sie auch die Tabelle mit sich selbst verbinden, wie so: die eine Unterabfrage erfordern würde. Vielleicht ist dies so etwas wie:

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

Dies verwendet group by aber wird die Ausgabe in das gewünschte Format.

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 
Verwandte Themen