GROUP BY 子句:将数据分成若干组
GROUP BY 子句中列名/字段名的书写顺序,并不影响最终的分组结果。
分组结果的聚合
PS:1.将一类 行中多条数据 的情况,视作一种错误。
例子:
这样的话虽然是7列4行,但是SQL只会分析其“市场部' 组、'运营部' 组、'设计部' 组 这个 分组 构成的 虚拟表。则分析的就不是4行数据,而是3行数据,即,无意义
解决方法:‘聚合函数’ (无论原字段有多少行,结果字段只有一行)
中位数的检索:评价各维度表现高低的方法
找中位数 → 对分组统计的结果进行排序(ORDER BY) → LIMIT 语句(若数据表 orders 共包含 137 名用户数据。所以如果我们想获取中位数,查询语句需要写成 LIMIT 68, 1)
--68*2+1=137
HAVING 子句
WHERE 子句作用于原数据表,用来筛 行;
HAVING 子句作用于分组结果,用来筛 分组.
即:筛选行的时候用 WHERE,筛分组的时候用 HAVING
若连接使用等时,不需要英逗,要根据条件来筛选
AND OR NOT
总结:
逻辑:确定数据来源 → 按行进行筛选 → 确定分组 → 按分组进行筛选 → 从结果中挑选部分列 → 排序 → 从结果中限制展示部分行
每执行一步,都会生成一张虚拟表,供下一步骤使用。
PS:由于 SQL 标准指出,SELECT 子句是在 WHERE、GROUP BY 子句之后执行的,因此在部分严格执行该标准的环境中,比如 Oracle、MySQL,WHERE 与 GROUP BY 子句里不能使用 SELECT 子句中定义的别名。而在 SQLite 中没有该限制。