我将大部分这些都基于试图获得“正确的”答案,因此您可能会发现存在一些性能问题。加速错误查询毫无意义。
了解表之间的关系 -大多数将是一对多的。知道“很多”表。确定您的联接所需的字段。
考虑一下LEFT加入方案 -选择上个月的所有雇员及其薪水。如果上个月他们没有得到薪水怎么办?
了解结果集: 1)在电子表格中,为您的查询手动输入至少一个正确的记录。2)以足够简单的形式编写查询,以识别应返回多少记录。使用这两种方法来测试您的查询,以确保加入新表不会改变结果。
将查询分为可管理的部分 -您无需一次全部编写。复杂查询有时只能是简单查询的集合。
注意聚合的混合级别:如果必须将月度,季度值和年初至今的值放入同一结果集中,则需要在按不同值分组的查询中分别计算它们。
知道何时使用UNION有时将子组分成自己的select语句会更容易。如果您有一个包含经理和其他雇员的表,并且必须在每一列上基于这些组之一中的成员资格执行Case语句,则编写Manager查询并将其与Employee查询合并可能会更容易。每个人将包含自己的逻辑。必须在不同的行中包含来自不同表的项目是显而易见的用途。
复杂/嵌套公式 -尽量一致地缩进,不要害怕使用多行。“ CASE WHEN CASE WHEN CASE WHEN”会让您发疯。花一些时间思考这些。最后保存复杂的计算。首先获取正确的记录。然后,您将知道正确的值,从而攻击复杂的公式。查看公式中使用的值将帮助您发现必须考虑NULL值的区域以及处理零分误差的地方。
在添加新表时经常进行测试,以确保仍能获得所需的结果集,并知道哪个连接或子句是罪魁祸首。