测验:聚合与窗口函数
如果我写入 WHERE count(*) > 5,为什么会出现错误?
- 因为 count 是 WHERE 中不支持的函数
- WHERE 在折叠成组之前进行评估,因此此时没有单元格目标。
- 因为括号是空的
- 因为它不是整数比较
平均(价格)结果高于预期。为什么我的数据中有一行价格为 NULL?
- NULL 将被视为 0,这会降低平均值。
- 因为NULL被视为最大值
- 这是因为 NULL 行会自动填充平均值。
- 这是因为聚合函数忽略 NULL,因此分母中也缺少该行。
如何在一次扫描中对同一组中的每个条件执行不同的聚合?
- 加入查询两次
- 在 WHERE 子句中用 OR 列出
- 使用 GROUP BY 两次
- 将 FILTER(WHERE 条件)附加到聚合函数
Rank()和dense_rank()有什么区别?
- 当出现平局时,rank 会跳过下一个rank (1,1,3),而dense_rank 不会跳过(1,1,2)
- rank 对关系进行不同的排名,dense_rank 对它们进行相同的排名
- ensemble_rank不支持分区
- 排名不需要排序
为了按类别查找前 3 个,我在 SELECT 中使用 row_number 并在同一查询的 WHERE 中过滤 rn <= 3,但出现错误。正确的方法是什么?
- 移动到拥有
- 将条件放入 ORDER BY 中
- 添加限制 3
- 使用子查询或 CTE 将其包装在一层中,并从外部对其进行过滤。
如果清空 OVER 括号(如 sum(revenue) OVER ())会怎样?
- 由于括号为空,因此发生错误。
- 整个结果成为一个窗口,并将总计粘贴到每一行中。
- 它是从第一行到上一行的累积和。
- 每行仅按原样返回其自己的收入值。
用lag()计算上个月比较时要注意什么?
- 如果没有销售额的月份本身不作为行存在,则将该月份的值与跳过的值进行比较。
- 在没有可比较的前一行的第一行上会发生错误。
- lag不支持ORDER BY排序
- lag 只能用于数字类型列。