以下SQL语句如何优化,具体能优化后的SQL语句内容: 可以对以上SQL语句进行如下优化:

  1. 使用表别名简化SQL语句的可读性。
  2. 将子查询中的LEFT JOIN改为INNER JOIN,因为在主查询中已经使用了LEFT JOIN,所以子查询中可以使用INNER JOIN来过滤数据,减少不必要的记录。
  3. 将子查询中的GROUP BY去掉,将聚合函数的计算移到主查询中。
  4. 将子查询中的SUM函数中的z.m9, z.m1, z.m2, z.m3, z.m4, z.m5, z.m6, z.m7, z.m8改为COALESCE(SUM(z.m9), 0), COALESCE(SUM(z.m1), 0), ...,以避免出现NULL值。
  5. 将主查询中的LEFT JOIN改为INNER JOIN,因为在子查询中已经过滤了数据,所以主查询中可以使用INNER JOIN来进一步减少不必要的记录。
  6. 将主查询中的GROUP BY去掉,将聚合函数的计算移到子查询中。

优化后的SQL语句如下:

SELECT
    x.*, 
    COALESCE(SUM(b.m9), 0) AS bm9,
    COALESCE(SUM(b.m1), 0) AS bm1,
    COALESCE(SUM(b.m2), 0) AS bm2,
    COALESCE(SUM(b.m3), 0) AS bm3,
    COALESCE(SUM(b.m4), 0) AS bm4,
    COALESCE(SUM(b.m5), 0) AS bm5,
    COALESCE(SUM(b.m6), 0) AS bm6,
    COALESCE(SUM(b.m7), 0) AS bm7,
    COALESCE(SUM(b.m8), 0) AS bm8
FROM
    (
        SELECT
            x.C_NAME, 
            y.C_ID, 
            y.C_STATUS, 
            COALESCE(SUM(z.m9), 0) AS m9, 
            COALESCE(SUM(z.m1), 0) AS m1, 
            COALESCE(SUM(z.m2), 0) AS m2, 
            COALESCE(SUM(z.m3), 0) AS m3, 
            COALESCE(SUM(z.m4), 0) AS m4, 
            COALESCE(SUM(z.m5), 0) AS m5, 
            COALESCE(SUM(z.m6), 0) AS m6, 
            COALESCE(SUM(z.m7), 0) AS m7, 
            COALESCE(SUM(z.m8), 0) AS m8, 
            x.C_ID AS C_IDS
        FROM
            db_twenty.t_place x
            INNER JOIN db_twenty.t_projectreportbatch y ON (x.C_ID = y.R_PLACE_ID AND y.R_STATEMENT_ID = 47)
            LEFT JOIN db_twenty.t_projectreports z ON (x.C_ID = z.C_TOWID AND z.R_STATEMENT_ID = 47 AND z.C_DELETED = 0)
        WHERE
            x.R_PARENT_ID = 441424000000
            AND x.C_DELETED = 0
    ) x
    INNER JOIN db_twenty.t_projectreports b ON (x.C_IDS = b.C_TOWID AND b.C_ANNUAL * 100 + b.C_PERIOD <= 202305 AND b.C_DELETED = 0)
GROUP BY
    x.C_IDS

优化后的SQL语句使用了表别名,将LEFT JOIN改为INNER JOIN,并将GROUP BY和SUM函数移动到主查询或子查询中,以提高查询效率和可读性。COALESCE函数的使用则避免了NULL值的出现。

优化后的SQL语句:获取地点信息及相关数据汇总

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

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