2011-01-14 62 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  | 
+-----------------+----------+ 

,因为你需要。