我有一个数据集,询问客户他们有多少宠物。有一种方法可以使用一个查询来计算不同的值(1,2,3等)吗? 谢谢!
+----------+------+
| Customer | Pets |
+----------+------+
| 20 | 2 |
| 21 | 3 |
| 22 | 3 |
| 23 | 2 |
| 24 | 4 |
+----------+------+
我想要的是一份清单:
答案 0 :(得分:107)
您可以按如下方式进行明确计算:
SELECT COUNT(DISTINCT column_name) FROM table_name;
编辑:
在您澄清并更新问题之后,我现在看到这是一个与我们原先想象的完全不同的问题。 “DISTINCT”在SQL中具有特殊含义。如果我理解正确,你想要这样的东西:
现在你可能想要使用子查询:
select COUNT(*) column_name FROM (SELECT DISTINCT column_name);
如果这不是您想要的,请告诉我。
答案 1 :(得分:46)
好的,我删除了我以前的答案,因为最终不是willlangford想要的,但我明白了,也许我们都误解了这个问题。
起初我还想到了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 |
+-----------------+----------+
根据需要。
答案 2 :(得分:1)
我认为this link非常好。
该链接的示例输出:
mysql> SELECT cate_id,COUNT(DISTINCT(pub_lang)), ROUND(AVG(no_page),2)
-> FROM book_mast
-> GROUP BY cate_id;
+---------+---------------------------+-----------------------+
| cate_id | COUNT(DISTINCT(pub_lang)) | ROUND(AVG(no_page),2) |
+---------+---------------------------+-----------------------+
| CA001 | 2 | 264.33 |
| CA002 | 1 | 433.33 |
| CA003 | 2 | 256.67 |
| CA004 | 3 | 246.67 |
| CA005 | 3 | 245.75 |
+---------+---------------------------+-----------------------+
5 rows in set (0.00 sec)
答案 3 :(得分:1)
您可以使用此:
select count(customer) as count, pets
from table
group by pets
答案 4 :(得分:0)
SELECT CUSTOMER, COUNT(*) as PETS
FROM table_name
GROUP BY CUSTOMER;