加油,新时代打工人!
思路:
先查出有数据的县区,用县区编码判断,不存在县区里的数据。然后,用union all进行两个SQL拼接起来。
SELECT
t.regionCode,
t.regionName,
t.testNum,
t.sampleNum,
t.squareNum,
t.cropsCatgoryNum
FROM
(
(
SELECT
ar.`code` AS regionCode,
ar.full_name AS regionName,
count( tm.id ) AS testNum,
IFNULL( sum( tm.sample_num ), 0 ) AS sampleNum,
FORMAT( IFNULL( sum( tm.fields_square )/ 1000, 0 ), 3 ) AS squareNum,
tc.crops_id AS cropsCatgoryNum
FROM
t_adminregion ar
LEFT JOIN t_test_main tm ON SUBSTRING( tm.village, 1, 6 ) = SUBSTRING( ar.`code`, 1, 6 )
LEFT JOIN t_test_crops tc ON tc.test_id = tm.id
WHERE
ar.`level` = 22
AND MONTH ( tm.create_time ) = 1
GROUP BY
ar.`code`
ORDER BY
ar.`code`
) UNION ALL
SELECT
t1.CODE,
t1.full_name,
0 AS TestNum,
0 AS SampleNum,
0 AS SquareNum,
0 AS CropsCatgoryNum
FROM
t_adminregion t1
LEFT JOIN (
SELECT
ar.`code` AS regionCode,
ar.full_name AS regionName,
count( tm.id ) AS testNum,
IFNULL( sum( tm.sample_num ), 0 ) AS sampleNum,
FORMAT( IFNULL( sum( tm.fields_square )/ 1000, 0 ), 3 ) AS squareNum,
tc.crops_id AS cropsCatgoryNum,
tm.create_time AS createTime
FROM
t_adminregion ar
LEFT JOIN t_test_main tm ON SUBSTRING( tm.village, 1, 6 ) = SUBSTRING( ar.`code`, 1, 6 )
LEFT JOIN t_test_crops tc ON tc.test_id = tm.id
WHERE
ar.`level` = 22
AND MONTH ( tm.create_time ) = 1
GROUP BY
ar.`code`
ORDER BY
ar.`code`
) a ON t1.CODE = a.regionCode
WHERE
a.regionCode IS NULL
AND t1.`level` = 22
) t
GROUP BY
t.`regionCode`
ORDER BY
t.`regionCode`