一、WHERE
### --- where
~~~ WHERE 子句允许过滤从 FROM 子句 SELECT.
~~~ 如果有一个 WHERE 子句,它必须包含一个表达式与 UInt8 类型。
~~~ 这通常是一个带有比较和逻辑运算符的表达式。
~~~ 此表达式计算结果为0的行将从进一步的转换或结果中解释出来。
~~~ WHERE 如果基础表引擎支持,则根据使用索引和分区修剪的能力评估表达式。
~~~ 注:有一个叫做过滤优化 prewhere 的东西.
二、GROUP BY子句
### --- GROUP BY 子句将 SELECT 查询结果转换为聚合模式,其工作原理如下:
~~~ GROUP BY 子句包含表达式列表(或单个表达式 -- 可以认为是长度为1的列表)。
~~~ 这份名单充当 “grouping key”,而每个单独的表达式将被称为 “key expressions”.
~~~ 在所有的表达式在 SELECT, HAVING,
~~~ 和 ORDER BY 子句中 必须 基于键表达式进行计算 或 上 聚合函数 在非键表达式(包括纯列)上。
~~~ 换句话说,从表中选择的每个列必须用于键表达式或聚合函数内,但不能同时使用。
~~~ 聚合结果 SELECT 查询将包含尽可能多的行,因为有唯一值 “grouping key” 在源表中。
~~~ 通常这会显着减少行数,通常是数量级,
~~~ 但不一定ÿ