书的第七章叫使用数字,但是我感觉这个章节名不好理解,反而是数字运算比较形象。
聚集函数,多行函数
- AVG():返回某列的平均值
- COUNT():返回某列的行数
- MAX():返回某列的最大值
- MIN():返回某列的最小值
- SUM():返回某列值之和
第七章 使用数字
- 计算平均值
- 使用avg函数求平均值
- avg函数忽略null,但不忽略0,所以在求平均值时,要考虑null的处理
- 对于具体的平均值,要使用分组语句group by
- 求某列中的最小/最大值
- max(),min()
- 会忽略null,但不忽略0
- 对于具体的属性,需要用group by
- 对某列的值求和
- sum()
- 对于具体的属性,需要用group by
- 求一个表的行数
- count()
- 当把列名作为参数传给count,会忽略null;当把*或常量传给count,不会忽略null
- 对于具体的属性,需要用group by
- 求某列值的个数
- 不传*,传具体列名
- 生成累积和
- DB2和Oracle
- 使用窗口版的SUM函数
- MySQL,PostgreSQL和SQL server
- 使用标量子查询计算累积和
- DB2和Oracle
- 生成累乘积
- DB2和Oracle
- 使用窗口版的sum over函数
- MySQL,PostgreSQL和SQL server
- 使用标量子查询计算累乘积
- DB2和Oracle
- 计算累计差
- DB2和Oracle
- 使用窗口版的SUM over函数
- MySQL,PostgreSQL和SQL server
- 使用标量子查询计算累积差
- DB2和Oracle
- 计算模式
- DB2和SQL server
- 使用窗口版的dense_rank函数
- Oracle
- 在8i中可以使用DB2中的方法
- 在9i及更高可以使用max的keep扩展
- MySQL,PostgreSQL和SQL server
- 使用子查询查找模式
- DB2和SQL server
- 计算中间值
- 解决思路:除了Oracle使用函数计算中间数,其他所有方案都是使用rozenshtein,abramovich和birger在Optimizing Transact-SQL:Advanced Programming Techniques中描述方法为基础。
- DB2
- 使用窗口函数count(*)over 和row_number
- MySQL和PostgreSQL
- 使用自连接查找中间数
- Oracle
- 使用median或percentile_count
- SQL server
- 使用窗口函数count(*)over 和row_number得到中间数
- 求总和的百分比
- 解决思路:先乘后除
- MySQL和PostgreSQL
- 先乘后除
- DB2,Oracle和SQL server
- 使用内联视图及窗口函数sum over计算出总和,及单独的总和,然后外层进行处罚和乘法
- 对可空列做聚集
- 解决思路:将null转化为0进行计算
- 计算不包括最大值和最小值的均值
- 解决思路:排除最大最小值
- MySQL和PostgreSQL
- 使用子查询排除最高和最低
- DB2,Oracle和SQLserver
- 使用内联视图及窗口函数max over 和min over生成一个结果集,用来剔除最大和最小
- 把字母数字串转换为数值
- DB2
- 使用translate 和replace,从字母数字串中提取数字字符
- Oracle和PostgreSQL
- 使用函数translate和replace,从字母数字串中提取数字字符
- MySQL和SQL server
- 暂无解决方案
- DB2
- 更改累计和中的值
- Oracle和DB2
- 使用窗口函数sum over创建累积和,并使用case表达式判断事务处理的类型
- MySQL,PostgreSQL和SQL server
- 使用标量子查询创建累积和,并使用case表达式判断事务处理的类型
- Oracle和DB2