SQL查询语句应该避免的五个错误( 二 )
上述的WF , 可以计算第一条记录到当前记录的累计总和 。 那在这一过程中 , 我在哪里出错了?
我没有花时间去了解Window Functions的基础知识和功能教程 。 所以 , 我的查询过程变得过于复杂 , 还出现了bug 。
运行以上查询:
本文插图
在SQL Fiddle中运行的示例
如果你想在本地数据库中跟着练习 , 可以尝试这个代码 (与PostgreSQL 9.3一起使用):
本文插图
03
用CASE WHEN计算平均值
CASE WHEN就像是编程语言中的IF语句 。 当我们需要计算某个数据子集的统计数据时 , 它会很有用 。
上图中 , 我计算了美国销售产品的平均价格 。 在CASE WHEN中 , 我使用ELSE的时候没有特别注意 。
在第一个例子中 , 我用0表示了所有的非美国产品价格 , 而这导致了总体平均价格降低 。 如果有很多非美国的产品 , 那么平均值可能接近于0 。
本文插图
在第二个例子中 , 我只计算了在美国销售的产品的平均价格 , 这也是我们想要的结果 。
请注意 , 使用CASE WHEN时 , 不是必须包括ELSE的 , 它的默认值是NULL 。
本文插图
重点是 , 使用CASE WHEN时 , 应该小心使用“else 0” 。 虽然它对SUM没有任何影响 , 但对AVG影响很大 。
04
用Join连接缺少值的列
本文插图
在两个字符串字段上的简单inner join
SQL中有4种不同的连接:内连接 (inner join)、外连接 (outer join)、左连接(left join)和右连接 (right join) 。 当我们直接使用JOIN时 , 默认是INNER连接 。
之前 , 我花了时间去阅读一些JOIN相关的教程 。 但我还是犯了一个低级错误 。
我写了一个与上面类似的Join查询 。 但是当我执行数据验证时 , 发现很多记录不见了 。 这只是一个简单的JOIN函数 , 为什么会出现这种情况呢?
结果表明 , 表1和表2中都有许多带有NULL值的string_field列 。 我以为JOIN会保留NULL值的记录 , 因为NULL值与NULL应该是一样的 , 不是吗?
所以我做了以下尝试:
返回结果为NULL 。
如果想要返回所有条目 , 就需要处理COALESCE中所有的string_field , 它会把所有NULL转换为空字符串 。
- 飞利浦·斯塔克|MySQL统计总数就用count,别花里胡哨的《死磕MySQL系列 十》
- MySQL|终于跑路了!三星关停越南工厂,欲将产能转移至他国
- MySQL|vivo X80、NEX5、S12曝光 搭载天玑和骁龙旗舰芯
- 雅虎|TDSQL破圈背后:国产数据库加速出击
- 数据库|原来这才是Python连接mysql数据库的正确姿势!(一)
- 删除|什么?还在用delete删除数据《死磕MySQL系列 九》
- MySQL|红米K50新机全面曝光,骁龙898+百瓦快充+柔性直屏,米粉期待已久
- 数据库|11 月数据库排行榜:PostgreSQL 充钱了、三巨头分数持续低迷
- 苹果|mysql安装教程--mac 怎么安装mysql?
- 游戏本|最全面mysql如何查询表信息大全!赶快来试试!(上)