计算不同的值

时间:2011-01-14 07:22:49

标签: mysql sql

我有一个数据集,询问客户他们有多少宠物。有一种方法可以使用一个查询来计算不同的值(1,2,3等)吗? 谢谢!

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

我想要的是一份清单:

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

5 个答案:

答案 0 :(得分:107)

您可以按如下方式进行明确计算:

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

如果这不是您想要的,请告诉我。

答案 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;