优化后的SQL语句:获取地点信息及相关数据汇总
以下SQL语句如何优化,具体能优化后的SQL语句内容: 可以对以上SQL语句进行如下优化:
- 使用表别名简化SQL语句的可读性。
- 将子查询中的LEFT JOIN改为INNER JOIN,因为在主查询中已经使用了LEFT JOIN,所以子查询中可以使用INNER JOIN来过滤数据,减少不必要的记录。
- 将子查询中的GROUP BY去掉,将聚合函数的计算移到主查询中。
- 将子查询中的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值。
- 将主查询中的LEFT JOIN改为INNER JOIN,因为在子查询中已经过滤了数据,所以主查询中可以使用INNER JOIN来进一步减少不必要的记录。
- 将主查询中的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值的出现。
原文地址: https://www.cveoy.top/t/topic/p2Tq 著作权归作者所有。请勿转载和采集!