我有一个数据集,询问客户他们有多少宠物.有一种方法可以使用一个查询来计算不同的值(1,2,3等)吗?谢谢!
+----------+------+
| Customer | Pets |
+----------+------+
| 20 | 2 |
| 21 | 3 |
| 22 | 3 |
| 23 | 2 |
| 24 | 4 |
+----------+------+
Run Code Online (Sandbox Code Playgroud)
我想要的是一份清单:
Fib*_*con 112
您可以按如下方式进行明确计算:
SELECT COUNT(DISTINCT column_name) FROM table_name;
Run Code Online (Sandbox Code Playgroud)
编辑:
在您澄清并更新问题之后,我现在看到这是一个与我们原先想到的完全不同的问题."DISTINCT"在SQL中具有特殊含义.如果我理解正确,你想要这样的东西:
现在你可能想要使用子查询:
select COUNT(*) column_name FROM (SELECT DISTINCT column_name);
Run Code Online (Sandbox Code Playgroud)
如果这不是您想要的,请告诉我.
mai*_*450 49
好吧,我删除了我以前的答案,因为最后它不是willlangford想要的,但我明白我可能都误解了这个问题.
起初我也想到了这个SELECT DISTINCT...问题,但对我来说,有人需要知道有多少人拥有与其他人不同的宠物,这似乎太奇怪......这就是为什么我认为这个问题可能不够明确.
所以,既然明确了真正的问题含义,为此制作一个子查询是一个相当大的开销,我最好使用一个GROUP BY条款.
想象一下,你有这样的表customer_pets:
+-----------------------+
| customer | pets |
+------------+----------+
| customer1 | 2 |
| customer2 | 3 |
| customer3 | 2 |
| customer4 | 2 |
| customer5 | 3 |
| customer6 | 4 |
+------------+----------+
Run Code Online (Sandbox Code Playgroud)
然后
SELECT count(customer) AS num_customers, pets FROM customer_pets GROUP BY pets
Run Code Online (Sandbox Code Playgroud)
会回来:
+----------------------------+
| num_customers | pets |
+-----------------+----------+
| 3 | 2 |
| 2 | 3 |
| 1 | 4 |
+-----------------+----------+
Run Code Online (Sandbox Code Playgroud)
如你所愿.