2010-03-25 5 views
6

J'ai une table avec tous les codes postaux américains. chaque ligne contient le nom de la ville et de l'état du code postal. J'essaie d'obtenir une liste de villes qui apparaissent dans plusieurs états. Ce ne serait pas un problème s'il n'y avait pas X nombre de codes postaux dans la même ville ...Sélectionnez le compte/les doublons

Donc, fondamentalement, je veux juste que la ville soit dans un état pour compter comme 1 au lieu de compter la ville/état 7 fois parce qu'il y a 2+ codes postaux dans cette ville/état ...

Je ne suis pas vraiment sûr de savoir comment faire cela. Je sais que je dois utiliser count mais comment dire au mysql de ne compter qu'un combo ville/état donné comme 1?

+1

Quel est le schéma de base de données? –

Répondre

9
SELECT City, Count(City) As theCount 
FROM (Select City, State From tblCityStateZips Group By City, State) As C 
GROUP By City 
HAVING COUNT Count(City) > 1 

Cela renverrait toutes les villes, avec le comte, qui étaient contenues dans plus d'un État.

Greenville 39
Greenwood 2
Greenbriar 3
etc.

0

Essayez d'utiliser une sélection distincte

SELECT DISTINCT city, state FROM table GROUP BY city 
0

Est-ce que cela l'affaire

Select CityName, Count (Distinct State) as StateCount 
From CityStateTable 
Group by CityName 
HAVING Count (Distinct State) > 1 
0

Vous devriez probablement avoir créé un tableau distinct pour les codes postaux puis pour éviter la duplication.

Vous voulez regarder dans le GROUP BY Aggregate.

1

groupe d'abord sur l'état et la ville, puis le groupe le résultat sur la ville:

select City 
from (
    select State, City 
    from ZipCode 
    group by State, City 
) x 
group by City 
having count(*) > 1 
+0

C'était presque ça! Juste besoin de changer la première ligne à: SELECT ville, COUNT (ville) comme c – mike

+0

@mike: Donc, vous vouliez combien d'états chaque ville apparaît aussi? Ce n'était pas dans la question, alors je ne l'ai pas inclus dans la réponse. – Guffa