计数不同的值

我有一个数据集询问客户有多less宠物,例如。 有一种方法,我可以计算不同的值(1,2,3等)? 谢谢!

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

我想要的是一个名单,说:

  • 2有2宠物
  • 2有3个宠物
  • 1有4个宠物

你可以做一个独特的计数如下:

 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); 

让我知道这是不是你想要的。

好吧,我删除了我之前的回答,因为最后这不是威尔兰福德所期待的,但是我指出,也许我们都是误解了这个问题。

起初我也想到了SELECT DISTINCT...东西,但是对我来说这似乎太奇怪了,以至于有人需要知道有多less人拥有不同数量的宠物,而不是其他的…这就是为什么我认为这个问题可能是不够清楚。

所以,现在真正的问题的含义已经澄清,为此做了一个子查询它的开销,我最好使用一个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 | +-----------------+----------+ 

如你所需。