2011-01-14 66 views
59

我有一個數據集詢問客戶他們有多少寵物,例如。有沒有一種方法,我可以計算不同的值(1,2,3等)? 謝謝!計數不同的值

+----------+------+ 
| 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寵物 2有3寵物 1有4寵物 – willlangford 2011-01-14 22:32:06

+1

作出子查詢?我認爲它對於如此簡單的任務來說開銷過大... – maid450 2011-01-18 19:31:35

34

好吧,我刪除了我之前的回答,因爲最終這不是威爾蘭福德正在尋找的東西,但是我說我的觀點可能是我們都誤解了這個問題。

我最初也想到了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  | 
+-----------------+----------+ 

,因爲你需要。