Mysql 计算不同的值

Mysql 计算不同的值,mysql,sql,Mysql,Sql,我有一个数据集,询问客户他们有多少宠物,例如。有没有一种方法可以通过一个查询计算不同的值(1、2、3等)? 谢谢 我想要的是一份清单,上面写着: 2有2只宠物 2人养了3只宠物 我有4只宠物 您可以按如下方式进行不同的计数: SELECT COUNT(DISTINCT column_name) FROM table_name; 编辑: 在你澄清并更新了这个问题之后,我现在明白了,这是一个与我们最初认为的完全不同的问题。“DISTINCT”在SQL中有特殊的含义。如果我理解正确的话,你想要这样

我有一个数据集,询问客户他们有多少宠物,例如。有没有一种方法可以通过一个查询计算不同的值(1、2、3等)? 谢谢

我想要的是一份清单,上面写着:

  • 2有2只宠物
  • 2人养了3只宠物
  • 我有4只宠物

您可以按如下方式进行不同的计数:

SELECT COUNT(DISTINCT column_name) FROM table_name;
编辑:

在你澄清并更新了这个问题之后,我现在明白了,这是一个与我们最初认为的完全不同的问题。“DISTINCT”在SQL中有特殊的含义。如果我理解正确的话,你想要这样的东西:

+-----------------------+
|  customer  |   pets   |
+------------+----------+
| customer1  |    2     |
| customer2  |    3     |
| customer3  |    2     |
| customer4  |    2     |
| customer5  |    3     |
| customer6  |    4     |
+------------+----------+
  • 2名顾客有1只宠物
  • 3位顾客养了2只宠物
  • 1客户有3只宠物
现在,您可能需要使用子查询:

select COUNT(*) column_name FROM (SELECT DISTINCT column_name);

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

好的,我删除了我以前的答案,因为最后它不是Willangford想要的,但我表明了我的观点,也许我们都误解了这个问题

起初,我也想到了
选择不同的…
这件事,但对我来说太奇怪了,有人需要知道有多少人的宠物数量与其他人的不同。。。这就是为什么我认为这个问题可能不够清楚

因此,现在真正的问题含义已经澄清,为这个问题进行子查询是一项相当大的开销,我最好使用
groupby
子句

假设您有这样的表
customer\u pets

+-----------------------+
|  customer  |   pets   |
+------------+----------+
| customer1  |    2     |
| customer2  |    3     |
| customer3  |    2     |
| customer4  |    2     |
| customer5  |    3     |
| customer6  |    4     |
+------------+----------+
然后

将返回:

+----------------------------+
|  num_customers  |   pets   |
+-----------------+----------+
|        3        |    2     |
|        2        |    3     |
|        1        |    4     |
+-----------------+----------+
你需要的话。

我觉得很好

该链接的输出示例:

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)
您可以使用以下选项:

select count(customer) as count, pets
from table
group by pets

我以前试过,但运气不好。以下是我的数据示例;客户|宠物20 | 2 21 | 3 22 | 3 23 | 2 24 | 4我想要的是一个列表,上面写着:2有2个宠物2有3个宠物1有4个宠物我实际上在寻找原始版本,这个解决方案的第一部分对我有效。谢谢你没有删除它!编辑的查询不适用于我,因为它不包含表名?还是我遗漏了什么?
count(customer)
中的列名是多余的。您只需使用:
选择COUNT(*)作为num\u客户,按pets从customer\u pets组中选择pets
@sgussman不正确,如果您允许
客户
为空值,则
计数(客户)
将不计数,而
计数(*)或
计数(宠物)
将不计数。在这种情况下,这取决于你喜欢什么样的行为。在任何情况下,即使在大多数情况下没有什么区别,我还是喜欢指定我想要计算可读性的列。
select count(customer) as count, pets
from table
group by pets
SELECT CUSTOMER, COUNT(*) as PETS 
FROM table_name 
GROUP BY CUSTOMER;