2012-01-20 17 views
7

Próbuję policzyć wystąpienia odrębnego zestawu miast i krajów w tabeli użytkownika.Zliczanie wystąpień różnych kolumn w SQL

W tabeli przedstawiono podobny do:

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

Co potrzebne jest lista wszystkich miastach, para kraj z liczbą wystąpień:

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

Obecnie uruchamiania kwerendy SQL aby uzyskać oddzielne pary:

$array = SELECT DISTINCT city, country FROM usertable 

następnie odczytać go do tablicy w PHP, a następnie przepuścić przez Tablica, prowadzenie strony internetowej liczyć każdy wystąpienia dla każdego wiersza w tablicy:

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

Jestem zakładając moje skąpe zrozumienie SQL czegoś brakuje - jaki byłby poprawny sposób to zrobić, najlepiej bez interwencji PHP?

Odpowiedz

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

Zapierająca dech w piersiach szybkość reakcji - bardzo dziękuję, działała idealnie (przyjmie odpowiedź tak szybko, jak to mi pozwoli). –

5

Co trzeba to grupa przez:

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

Dziękuję za bardzo szybką odpowiedź - idealnie! –

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

jeśli chcesz miasto i kraj preformated lub

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

czy nie.

+0

Dzięki - próbuję tego w MySQL i otrzymuję następujący błąd: "Każda wyprowadzona tabela musi mieć swój własny alias" –

+0

Niestety, mój zły. Mam edytować odpowiedź, aby to poprawić. –

+0

Wierzę, że to nie zadziała. Każdy 'count (*)' będzie po prostu całkowitą liczbą wierszy w 'baseview', który nie jest tym, co chciał OP. –

Powiązane problemy