我什么时候应该使用GROUP BY?

时间:2015-11-20 07:51:04

标签: mysql group-by where-clause

根据文件:

  

聚合函数通常需要添加GROUP BY语句。

好吧,我有一个包含聚合函数的查询:

select col1, count(col2)
from table
where col1 = 'anything'
group by col1;

现在,我的问题是:group by在上面的查询中有用还是无用?因为有where条款,我认为它不再需要group by。我错了吗?

3 个答案:

答案 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”的所有记录,将它们组合在一起,然后计算分组记录的数量。