2011-01-14 16 views
59

私は、顧客にいくつのペットがどれくらいいるかを尋ねるデータセットを持っています。私は別の値(1,2,3、など)を数えることができる1つのクエリの方法はありますか? ありがとう!個別の数値を集計する

+----------+------+ 
| Customer | Pets | 
+----------+------+ 
|  20 | 2 | 
|  21 | 3 | 
|  22 | 3 | 
|  23 | 2 | 
|  24 | 4 | 
+----------+------+ 

私がしたいことリストが言っている:

  • 2は2匹のペット
  • 2は3匹のペット
  • 1を持っていたが、4匹のペット

答えて

92

を持っていたあなたは明確な操作を行うことができます次のようにカウントされます。

SELECT COUNT(DISTINCT column_name) FROM table_name; 

編集:

あなたの説明を明確にし、質問を更新した後、私は今考えていたものとは全く異なる質問です。 "DISTINCT"はSQLでは特別な意味を持ちます。私が正しく理解していれば、あなたはこのような何かをしたい:

  • 2の顧客は1匹のペット
  • 3の顧客は2匹のペットを持っていた
  • 1の顧客は今、あなたはおそらくつもり3匹のペット

を持っていましたサブクエリを使用する場合:

select COUNT(*) column_name FROM (SELECT DISTINCT column_name); 

これはあなたが探しているものではないかどうか教えてください。

+0

私はそれ以前にゼロ運を試していました。ここに私のデータの例があります。 カスタマー|ペット 20 | 2 21 | 3 22 | 3 23 | 2 24 | 4 私はほしいと言っているリストは: 2持っていたペット 2 3ペットを持っていた 1 4ペット – willlangford

+1

はサブクエリーをしていましたか?私はそのような単純なタスクのためにあまりにもオーバーヘッドだと思う... – maid450

+0

私は実際に元のバージョンを探していた、このソリューションの最初の部分は私のために働いた。それを削除してくれてありがとう! –

34

私が前回の回答を削除したのは、最終的にwouldlangfordが探していたものではなかったからです。しかし、私は多分質問を誤解していたかもしれないと私は指摘しました。

私はまた最初はSELECT DISTINCT...のことを考えましたが、他の人よりいくつの人がペットの数が多いか知る必要があったのは私にはあまりにも奇妙なようでした...それはなぜでしょうか?十分にはっきりしない。

実際の質問の意味が明らかになったので、このためのサブクエリを非常にオーバーヘッドにするので、GROUP BY節を使用することをお勧めします。

は、あなたがこのようなテーブルcustomer_petsを持って想像:

+-----------------------+ 
| customer | pets | 
+------------+----------+ 
| customer1 | 2  | 
| customer2 | 3  | 
| customer3 | 2  | 
| customer4 | 2  | 
| customer5 | 3  | 
| customer6 | 4  | 
+------------+----------+ 

その後、

SELECT count(customer) AS num_customers, pets FROM customer_pets GROUP BY pets 

を返します:

+----------------------------+ 
| num_customers | pets | 
+-----------------+----------+ 
|  3  | 2  | 
|  2  | 3  | 
|  1  | 4  | 
+-----------------+----------+ 

あなたが必要として。

+0

'count(customer)'の列名は余分です。あなたは 'customer'のためにNULL値を許すならば、' COUNT(customer) 'はそれらを数えず、' customer'は 'customer''に代入することができます。' SELECT COUNT(*)AS num_customers、pets FROM customer_pets GROUP BY pets' – sgussman

+3

@sgussman COUNT(*) 'または' COUNT(ペット) 'になります。その場合は、あなたが好む行動に依存します。いずれにしても、ほとんどの場合、私は可読性のために数えたいと思う列を指定するのが好きです。 – maid450