计数不同的值
我有一个数据集询问客户有多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 | +-----------------+----------+
如你所需。