2010-03-25 25 views
6

Tengo una tabla con todos los códigos postales de EE. UU. cada fila contiene la ciudad y el nombre del estado para el código postal. Estoy tratando de obtener una lista de ciudades que aparecen en varios estados. Esto no sería un problema si no hubiera una X cantidad de códigos postales en la misma ciudad ...Seleccionar recuento/duplicados

Básicamente, solo quiero que la ciudad en un estado cuente como 1 en lugar de contar la ciudad/estado 7 veces porque hay 2 códigos postales en esa ciudad/estado ...

No estoy seguro de cómo hacerlo. Sé que necesito usar el conteo, pero ¿cómo le digo al mysql que solo cuente un combo de ciudad/estado dado como 1?

+1

¿Cuál es el esquema de base de datos? –

Respuesta

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 

Esto devolvería todas las ciudades, con el recuento, que se encuentra en más de un estado.

Greenville 39
Greenwood 2
GREENBRIAR 3
etc.

0

Intente utilizar un selecto distinta

SELECT DISTINCT city, state FROM table GROUP BY city 
0

afectará esto el truco

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

Probablemente debería haber creado una tabla separada para los códigos postales a continuación, para evitar la duplicación.

que desea buscar en el GROUP BY Aggregate.

1

primer grupo de estado y la ciudad, a continuación, el resultado del grupo en la ciudad:

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

¡Esto fue casi todo! Solo necesitaba cambiar la primera línea a: SELECCIONE la ciudad, COUNT (ciudad) como c – mike

+0

@mike: ¿Así que quería cuántos estados aparecen cada ciudad también? Eso no estaba en la pregunta, así que no lo incluí en la respuesta. – Guffa