Reputation: 1749
I'm trying to count the occurrences of a distinct set of cities and countries in a user table.
The table is set out similar to:
userid city country
------ --------- --------------
1 Cambridge United Kingdom
2 London United Kingdom
3 Cambridge United Kingdom
4 New York United States
What I need is a list of every city, country pair with the number of occurrences:
Cambridge, United Kingdom, 2
London, United Kingdom, 1
New York, United States, 1
Currently I run an SQL query to get the distinct pairs:
$array = SELECT DISTINCT city, country FROM usertable
then read it into an array in PHP, and loop through the array, running a query to count each occurrences for each row in the array:
SELECT count(*) FROM usertable
WHERE city = $array['city']
AND country = $array['country']
I'm assuming my scant grasp of SQL is missing something - what would be the correct way to do this, preferably without the intervention of PHP?
Upvotes: 21
Views: 28730
Reputation: 65274
SELECT cityandcountry, count(*) as occurrences FROM (
SELECT DISTINCT concat(city, country) FROM tablename
) as baseview;
if you want city and country preformated, or
SELECT cityandcountry, count(*) as occurrences FROM (
SELECT DISTINCT city, country FROM tablename
) as baseview;
if not.
Upvotes: 1
Reputation: 66697
What you need is a group by:
Select city, country, count(*) as counter
from usertable
group by city, country
Upvotes: 10
Reputation: 79838
select city, country, count(*)
from usertable
group by city, country
Upvotes: 31