2010-07-12 7 views
1

Quand je lance le numéro de requête 1:SQL: Groupe compte en lignes de résultats individuels

SELECT id, name, COUNT(name) AS count 
    FROM markers 
WHERE state like 'OR' 
group by named 

Je reçois les résultats suivants:

id name    count 
14 Alsea    2 
76 Applegate Valley 1 
3 Ashland    9 
64 Beaver    1 
26 Bend    1 
10 Carlton    2 

Cela est bien, sauf que je veux chaque instance d'un le nom compté doit apparaître avec son ID respectif comme indiqué dans le résultat de la requête numéro 2:

SELECT id, name, COUNT(name) AS count 
    FROM markers 
WHERE state like 'OR' 
group by name, id 

Qui produit le r suivant ésultats:

id name    count 
14 Alsea    1 
28 Alsea    1 
76 Applegate Valley 1 
3 Ashland    1 
13 Ashland    1 
16 Ashland    1 
20 Ashland    1 
22 Ashland    1 
43 Ashland    1 
48 Ashland    1 
51 Ashland    1 
72 Ashland    1 
64 Beaver    1 
26 Bend    1 
10 Carlton    1 
27 Carlton    1 

Y at-il une question que je peux courir qui renverra l'identifiant et le nom du numéro de requête 2 et le nombre correspondant du numéro de requête 1 dans chaque ligne comme indiqué ci-dessous?

id name    count 
14 Alsea    2 
28 Alsea    2 
76 Applegate Valley 1 
3 Ashland    9 
13 Ashland    9 
16 Ashland    9 
20 Ashland    9 
22 Ashland    9 
43 Ashland    9 
48 Ashland    9 
51 Ashland    9 
72 Ashland    9 
64 Beaver    1 
26 Bend    1 
10 Carlton    2 
27 Carlton    2 

Répondre

2

Essayez ceci:

SELECT id, name, 
(SELECT COUNT(name) 
    FROM markers im 
    WHERE state like 'OR' 
    GROUP BY name 
    HAVING im.name=m.name) as count 
FROM markers m 
WHERE state like 'OR' 
GROUP BY name, id 
+0

+1: Vous avez été d'abord –

+0

Merci, mais seulement parce que vous avez modifié sa question je suppose –

+0

risques professionnels –

1

Vous pouvez utiliser:

SELECT t.id, 
      t.name, 
      COALESCE(x.cnt, 0) AS count 
    FROM MARKERS t 
LEFT JOIN (SELECT m.name, 
        COUNT(m.*) AS cnt 
      FROM MARKERS m 
      WHERE m.state LIKE 'OR' 
     GROUP BY n.name) x ON x.name = t.name 
    WHERE t.state LIKE 'OR' 
    GROUP BY t.id, t.name 
Questions connexes