2012-01-20 7 views
7

私は、ユーザーテーブル内の都市と国の異なるセットの出現を数えようとしています。SQL内の異なる複数の列の出現をカウントする

テーブルはと同様にして設定されている:私は必要なもの

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

は、すべての都市のリスト、出現回数を持つ国のペアである:

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

は現在、私は、SQLクエリを実行します別のペアを取得する:

$array = SELECT DISTINCT city, country FROM usertable 

次に、それをPHPで配列に読み込み、配列、配列内の各行について、それぞれ発生をカウントするクエリを実行している:

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

私はSQLの私のわずかな把握が何か欠けていると仮定しています - 好ましくは介入せずに、何がこれを行うための正しい方法だろうがPHPの?

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

答えて

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

応答の驚異的な速度 - 非常に感謝して、完璧に働いた(私にできるだけ早く答えを受け入れる) –

5

は何が必要でグループです。

+0

非常に迅速な回答ありがとう - 完璧! –

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

あなたは都市や国がプリフォーマットしたい場合、または

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

いない場合:

+0

ありがとう - MySQLでこれを試して、次のエラーを取得します: 'すべての派生テーブルは、独自のエイリアスを持っている必要があります' –

+0

申し訳ありません。私はそれを修正する私の答えを編集しました。 –

+0

私はこれがうまくいかないと思います。それぞれの 'count(*)'は 'baseview'の行の総数になります。これはOPが望んでいないものです。 –

関連する問題