2016-05-10 11 views
-2

データベースに人名の列が含まれています。残念ながら、列には人名のわずかな違いが含まれています。私は、名前の別個のリストと各バリエーションのレコード数を返すクエリを希望します。これは私のクエリでMySQLのレコード数が異なる列の値と一致する

Stan c. Smith 2 
Stan c Smith 3 
Stan c, Smith 1 

:私はこの結果をしたい

+---------------+ 
| Customer  | 
+---------------+ 
| Stan c. Smith | 
| Stan c Smith | 
| Stan c. Smith | 
| Stan c Smith | 
| Stan c, Smith | 
| Stan c Smith | 
+---------------+ 

SELECT 
    DISTINCT(`Customer`) as aCustomer, COUNT(`Customer`) 
FROM 
    `customerTable` 
where 
    `Customer` like "%Stan%c%Smith%" 

しかし、それだけを返す:

をここで

は、列が次のようになります

Stan c Smith 6 

私は2つの質問がある:

  1. なぜMySQLのリストだけ結果を1つでしょうか?
  2. 私が探している結果を得るには何が必要ですか?

ありがとうございます。 、

1)カウントは、行の合計数を返す集約関数、次のとおりです。

答えて

0

を与える必要がありますデフォルトでは、これを使用しない限り1を返しますGROUP BY

2)GROUP BY Customerを使用すると、同じ名前のすべての顧客がグループ化されます。カウントを実行すると、一意のインスタンスが1つカウントされます。

SELECT 
    `Customer`, COUNT(`Customer`) 
FROM 
    `customerTable` 
WHERE 
    `Customer` like "%Stan%c%Smith%" 
GROUP BY `Customer` 

は、デモ用のSQLFiddleを参照してください

0

あなたがして、グループを使用する必要がありますが、以下のクエリは、あなたの質問に答えるために、結果

SELECT 
    `Customer` as aCustomer, COUNT(`Customer`) as count 
FROM 
     `customerTable` 
where 
    `Customer` like "%Stan%c%Smith%" 
group by aCustomer 
関連する問題