SQL 查询语句优化:计算员工旷工和差旅月工时

以下 SQL 查询语句用于计算员工的旷工时间和差旅月工时,并包含优化建议:

SELECT
  name,
  bm,
  SUM(
    CASE
      WHEN bc LIKE '%白车身%' AND sb1dkjg = '缺卡' AND xb1dkjg = '缺卡' AND (gldspd IS NULL OR gldspd = '') THEN 480
      WHEN bc = '自由工时' AND sb1dksj IS NULL AND xb1dksj IS NULL AND (gldspd IS NULL OR gldspd = '') THEN 480
      ELSE 0
    END
  ) / 60.0 AS 旷工,
  ROUND(
    SUM(
      CASE
        WHEN bc = '自由工时' AND gzsc != 0 AND cqts = 1 THEN gzsc
        WHEN bc = '自由工时' AND gldspd LIKE '%出差%' AND gzsc = 0 AND cqts = 1 AND chuchai = 1 THEN 480
        WHEN bc = '自由工时' AND gzsc = 0 AND cqts = 0 AND chuchai = 1 THEN 480
        WHEN bc <> '自由工时' AND gldspd LIKE '%出差%' AND chuchai = 1 THEN 480
        WHEN sb2dksj IS NOT NULL AND xb2dksj IS NOT NULL AND chuchai != 1 THEN (xb1dksj - sb1dksj)  -- 添加新的条件判断
        ELSE 0
      END
    ) / 60.0, 1
  ) AS 差旅月工时
FROM Test_kqzhb
WHERE rq BETWEEN '2023-09-01' AND '2023-09-25' AND name = '蔡号强'
GROUP BY name, bm;

优化建议:

  • 使用更具体的描述性别名: 例如将 旷工 更名为 旷工时长差旅月工时 更名为 差旅工作时长,以提高代码可读性。
  • 添加注释: 为每个 CASE 语句添加注释,解释每个条件的逻辑,方便维护和理解代码。
  • 考虑使用子查询: 如果 SQL 语句过于复杂,可以考虑将其拆分成子查询,以提高可读性和性能。
  • 优化 WHERE 子句: 可以将 name = '蔡号强' 放在 GROUP BY 语句之后,避免对所有数据进行筛选。

注意: 此 SQL 代码示例仅供参考,实际使用中需要根据具体需求进行调整。

SQL 查询语句优化:计算员工旷工和差旅月工时

原文地址: http://www.cveoy.top/t/topic/z5G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录