2012-01-20 9 views
7

Estoy tratando de contar las ocurrencias de un conjunto distinto de ciudades y países en una tabla de usuario.Contando las ocurrencias de distintas columnas múltiples en SQL

El cuadro figura similar a:

userid city  country 
------ --------- -------------- 
1  Cambridge United Kingdom 
2  London  United Kingdom 
3  Cambridge United Kingdom 
4  New York United States 

Lo que necesito es una lista de todas las ciudades, par de campo con el número de ocurrencias:

Cambridge, United Kingdom, 2 
London, United Kingdom, 1 
New York, United States, 1 

Yo ahora una consulta SQL para obtener los pares distintos:

$array = SELECT DISTINCT city, country FROM usertable 

luego léalo en una matriz en PHP y recorra el matriz, ejecutar una consulta para contar cada ocurrencias para cada fila de la matriz:

SELECT count(*) FROM usertable 
WHERE city = $array['city'] 
AND country = $array['country'] 

Asumo mi escasa comprensión de SQL le falta algo - lo que sería la forma correcta de hacer esto, de preferencia sin la intervención de PHP?

Respuesta

13
select city, country, count(*) 
from usertable 
group by city, country 
+0

Impresionante velocidad de respuesta - muchas gracias, funcionó a la perfección (aceptará la respuesta en cuanto me lo permita) –

5

Lo que se necesita es un grupo por:

Select city, country, count(*) as counter 
from usertable 
group by city, country 
+0

Gracias por la respuesta rápida, ¡perfecto! –

1
SELECT cityandcountry, count(*) as occurrences FROM (
    SELECT DISTINCT concat(city, country) FROM tablename 
) as baseview; 

si quieres ciudad y país preformateado, o

SELECT cityandcountry, count(*) as occurrences FROM (
    SELECT DISTINCT city, country FROM tablename 
) as baseview; 

si no.

+0

Gracias - intentando esto en MySQL, y aparece el siguiente error: 'Cada tabla derivada debe tener su propio alias' –

+0

Lo siento, mi mal. He editado mi respuesta para corregir eso. –

+0

Creo que esto no funcionará. Cada 'count (*)' será el número total de filas en 'baseview', que no es lo que el OP quería. –

Cuestiones relacionadas