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