学工信息大屏出错修改

This commit is contained in:
2025-12-12 18:37:45 +08:00
parent b27938762b
commit eb0669e77b

View File

@@ -710,34 +710,69 @@
order by quantity desc limit 4 order by quantity desc limit 4
</select> </select>
<select id="getCountbyCity" resultType="java.util.Map"> <select id="getCountbyCity" resultType="java.util.Map">
select * SELECT
from (select (case city,
when b.id_card = 4501 then '南宁市' SUM(total_count) AS total_count, -- 合并外省总人数
when b.id_card = 4502 then '柳州市' SUM(male_count) AS male_count, -- 合并外省男生数
when b.id_card = 4503 then '桂林市' SUM(female_count) AS female_count,-- 合并外省女生数
when b.id_card = 4504 then '梧州市' -- 若需显示身份证前缀,外省统一标为“外省”,广西保留原前缀(可选)
when b.id_card = 4505 then '北海市' CASE WHEN city = '外省' THEN '外省' ELSE GROUP_CONCAT(DISTINCT 身份证前缀 SEPARATOR ',') END AS 身份证前缀
when b.id_card = 4506 then '防城港市' FROM (
when b.id_card = 4507 then '钦州市' SELECT
when b.id_card = 4508 then '贵港市' CASE
when b.id_card = 4509 then '玉林市' -- 广西地市精准匹配
when b.id_card = 4510 then '百色市' WHEN b.id_card = '4501' THEN '南宁市'
when b.id_card = 4511 then '州市' WHEN b.id_card = '4502' THEN '州市'
when b.id_card = 4512 then '河池市' WHEN b.id_card = '4503' THEN '桂林市'
when b.id_card = 4513 then '来宾市' WHEN b.id_card = '4504' THEN '梧州市'
when b.id_card = 4514 then '崇左市' WHEN b.id_card = '4505' THEN '北海市'
end) as city, WHEN b.id_card = '4506' THEN '防城港市'
WHEN b.id_card = '4507' THEN '钦州市'
WHEN b.id_card = '4508' THEN '贵港市'
WHEN b.id_card = '4509' THEN '玉林市'
WHEN b.id_card = '4510' THEN '百色市'
WHEN b.id_card = '4511' THEN '贺州市'
WHEN b.id_card = '4512' THEN '河池市'
WHEN b.id_card = '4513' THEN '来宾市'
WHEN b.id_card = '4514' THEN '崇左市'
-- 广西其他编码兜底
WHEN b.id_card LIKE '45%' THEN '广西-其他地区'
-- 所有非广西编码统一标为“外省”
ELSE '外省'
END AS city,
total_count, total_count,
male_count, male_count,
female_count female_count,
from (select left (AES_DECRYPT(UNHEX(id_card), 'zhxg'), 4) as id_card, count (1) as total_count, sum (case when gender='男' then 1 else 0 end) as male_count, sum (case when gender='女' then 1 else 0 end) as female_count b.id_card AS 身份证前缀
from srs_student d left join srs_class e FROM (
on d.class_id=e.class_id SELECT
left join srs_grade f on f.grade_id=e.grade_id t.id_card,
where f.grade_status in (1, 3) COUNT(1) AS total_count,
GROUP BY left (AES_DECRYPT(UNHEX(id_card), 'zhxg'), 4)) b) c SUM(CASE WHEN COALESCE(gender, '') = '男' THEN 1 ELSE 0 END) AS male_count,
where c.city is not null; SUM(CASE WHEN COALESCE(gender, '') = '女' THEN 1 ELSE 0 END) AS female_count
FROM (
SELECT
-- 处理解密NULL的情况转为空字符串
COALESCE(LEFT(AES_DECRYPT(UNHEX(id_card), 'zhxg'), 4), '') AS id_card,
gender
FROM srs_student d
LEFT JOIN srs_class e ON d.class_id = e.class_id
LEFT JOIN srs_grade f ON f.grade_id = e.grade_id
WHERE f.grade_status IN (1, 3)
) t
GROUP BY t.id_card
) b
) c
-- 按 city 分组:广西各地市单独分组,外省合并为一组
GROUP BY city
-- 可选:排序(广西地市在前,外省在后)
ORDER BY
CASE
WHEN city = '外省' THEN 2
WHEN city = '广西-其他地区' THEN 1
ELSE 0
END,
city;
</select> </select>
<select id="getSchoolCountbyGrade" resultType="java.util.Map"> <select id="getSchoolCountbyGrade" resultType="java.util.Map">
select c.grade_code, count(1) as number select c.grade_code, count(1) as number
@@ -762,33 +797,49 @@
and gender is not null and gender is not null
</select> </select>
<select id="getNotSchoolTotalCount" resultType="java.util.Map"> <select id="getNotSchoolTotalCount" resultType="java.util.Map">
select sum(total_count) as number SELECT SUM(total_count) AS number
from (select (case FROM (
when b.id_card = 4501 then '南宁市' SELECT
when b.id_card = 4502 then '柳州市' CASE
when b.id_card = 4503 then '桂林市' WHEN b.id_card = 4501 THEN '南宁市'
when b.id_card = 4504 then '州市' WHEN b.id_card = 4502 THEN '州市'
when b.id_card = 4505 then '北海市' WHEN b.id_card = 4503 THEN '桂林市'
when b.id_card = 4506 then '防城港市' WHEN b.id_card = 4504 THEN '梧州市'
when b.id_card = 4507 then '钦州市' WHEN b.id_card = 4505 THEN '北海市'
when b.id_card = 4508 then '贵港市' WHEN b.id_card = 4506 THEN '防城港市'
when b.id_card = 4509 then '玉林市' WHEN b.id_card = 4507 THEN '钦州市'
when b.id_card = 4510 then '百色市' WHEN b.id_card = 4508 THEN '贵港市'
when b.id_card = 4511 then '贺州市' WHEN b.id_card = 4509 THEN '玉林市'
when b.id_card = 4512 then '河池市' WHEN b.id_card = 4510 THEN '百色市'
when b.id_card = 4513 then '来宾市' WHEN b.id_card = 4511 THEN '贺州市'
when b.id_card = 4514 then '崇左市' WHEN b.id_card = 4512 THEN '河池市'
end) as city, WHEN b.id_card = 4513 THEN '来宾市'
WHEN b.id_card = 4514 THEN '崇左市'
END AS city,
total_count, total_count,
male_count, male_count,
female_count female_count
from (select left (AES_DECRYPT(UNHEX(id_card), 'zhxg'), 4) as id_card, count (1) as total_count, sum (case when gender='男' then 1 else 0 end) as male_count, sum (case when gender='女' then 1 else 0 end) as female_count FROM (
from srs_student d left join srs_class e -- 优化先解密别名避免GROUP BY重复计算解密逻辑
on d.class_id=e.class_id SELECT
left join srs_grade f on f.grade_id=e.grade_id t.id_card,
where f.grade_status in (1, 3) COUNT(1) AS total_count, -- 关键COUNT与括号无空格
GROUP BY left (AES_DECRYPT(UNHEX(id_card), 'zhxg'), 4)) b) c SUM(CASE WHEN gender = '男' THEN 1 ELSE 0 END) AS male_count,
where c.city is null SUM(CASE WHEN gender = '女' THEN 1 ELSE 0 END) AS female_count
FROM (
SELECT
LEFT(AES_DECRYPT(UNHEX(id_card), 'zhxg'), 4) AS id_card, -- 关键LEFT与括号无空格
gender
FROM srs_student d
LEFT JOIN srs_class e ON d.class_id = e.class_id
LEFT JOIN srs_grade f ON f.grade_id = e.grade_id
WHERE f.grade_status IN (1, 3)
) t
GROUP BY t.id_card -- 直接用别名,避免重复解密
) b
) c
WHERE c.city IS NULL;
</select> </select>
<select id="getMajorsCount" resultType="java.util.Map"> <select id="getMajorsCount" resultType="java.util.Map">
select d.dept_name as deptName, select d.dept_name as deptName,