由GroupBy-Having想到的

来源:互联网 发布:sqlserver清空数据库 编辑:程序博客网 时间:2024/06/11 01:33

MySQL 的最简单形式、最容易理解的形式是:
SELECT column FROM table WHERE condition

然后,人们希望能对结果进行分组,于是出现了聚集函数,如查询总积分超过60的人:
SELECT name, SUM(credit) FROM creditlog WHERE condition GROUP BY name HAVING SUM(credit) > 60 ;

它其实是两步操作:
1. SELECT name, credit FROM creditlog WHERE condition;
2. 对第一步的结果,依据name分组,求和
3. 针对第二步的求和结果做过滤

1 和 2 是一种流式计算的关系。 MySQL 为了一次性解决基本查询和流式计算的问题,就发明了GroupBy,为了对分组的结果进行类似WHERE的过滤,就发明了Having,其实它本质就是一个WHERE条件,只不过是为了避免关键词重复而已。

MySQL表达这种2层流式计算还算简便,但当我们需要用它来处理3层、4层、N层的流式计算时,MySQL 语句就会写得复杂无比。我认为,这是MySQL语言设计的缺陷。

0 0
原创粉丝点击