根据文件:
聚合函数通常需要添加GROUP BY语句。
好吧,我有一个包含聚合函数的查询:
select col1, count(col2)
from table
where col1 = 'anything'
group by col1;
现在,我的问题是:group by
在上面的查询中有用还是无用?因为有where
条款,我认为它不再需要group by
。我错了吗?
答案 0 :(得分:2)
这个怎么样:
select count(*) as theCount
from table
where col1 = 'anything';
如果我正确地读了茶叶。很高兴删除答案(我们每天得到5个:))
create table t9
( id int auto_increment primary key,
col1 varchar(10) not null,
col2 varchar(10) not null
);
insert t9 (col1,col2) values ('a','b'),('a','b'),('a','c'),('b','z');
select count(*) as theCount
from t9
where col1 = 'a';
+----------+
| theCount |
+----------+
| 3 |
+----------+
select count(col2) as theCount
from t9
where col1 = 'a';
+----------+
| theCount |
+----------+
| 3 |
+----------+
select count(distinct col2) as theCount
from t9
where col1 = 'a';
+----------+
| theCount |
+----------+
| 2 |
+----------+
select col1,count(*) as theCount
from t9
group by col1
order by col1;
+------+----------+
| col1 | theCount |
+------+----------+
| a | 3 |
| b | 1 |
+------+----------+
select col1,count(*) as theCount
from t9
where col1='a'
group by col1
order by col1;
+------+----------+
| col1 | theCount |
+------+----------+
| a | 3 |
+------+----------+
答案 1 :(得分:2)
分组依据与聚合函数一起使用,例如count。
在您的示例中,不需要分组依据,因为您只将结果限制为一个值,因此您的选择等于:
select count(*)
from table
where col1 = 'anything';
但是如果你删除了where过滤器:
select col1, count(col2)
from table
group by col1;
您将看到有多少行,具有不同的col1
值。因此,它将为每个col1
值运行您的第一个选择。
答案 2 :(得分:0)
如果没有Group By语句,那么count的输出总是为1,你会得到每次发生的记录。
在您的情况下分组和WHERE匹配col1 =“anything”的所有记录,将它们组合在一起,然后计算分组记录的数量。