From 2f4513d501c19cca4908565c74a9cd08f211b058 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Tue, 29 Sep 2026 21:42:34 +0800 Subject: [PATCH] =?UTF-8?q?:memo:=20=E6=96=B0=E5=A2=9E=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E5=90=84=E4=B8=9A=E5=8A=A1=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=87=8F=E7=BB=9F=E8=AE=A1=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../stat_account_module_create_count.sql | 443 ++++++++++++++++++ 1 file changed, 443 insertions(+) create mode 100644 doc/sql/transport/stat_account_module_create_count.sql diff --git a/doc/sql/transport/stat_account_module_create_count.sql b/doc/sql/transport/stat_account_module_create_count.sql new file mode 100644 index 00000000..6cc9a5b2 --- /dev/null +++ b/doc/sql/transport/stat_account_module_create_count.sql @@ -0,0 +1,443 @@ +-- 统计指定账号在指定日期内、各业务模块创建的数据量 +-- +-- 使用前只改下面两个日期(含首尾)。单日统计时两个日期填同一天。 +-- 统计口径: +-- 1. 按 blade_user.account 找到用户 ID,再按各业务主表 create_user、create_time 计数。 +-- 2. 同一账号若存在多个用户 ID(含已删除账号),历史数据会一并计入该账号。 +-- 3. 只统计各功能列表对应的主表。随主单保存的明细、联系人、附件、变更流水不重复计数。 +-- 4. 含已逻辑删除的数据,因为这些记录确实被创建过。 +-- 5. 客商档案菜单挂在「车/船务管理」下,这里按统计口径单独计入「客商管理」。 +-- 6. 未纳入:结算管理、首付款管理、在途管理,以及系统管理下的开票项目。 +-- 7. 导入运单产生的运单计入「业务模块-运单管理」,不另计导入批次。 + +SET NAMES utf8mb4; + +SET @stat_start = '2026-09-29'; +SET @stat_end = '2026-09-29'; +SET @stat_end_exclusive = DATE_ADD(@stat_end, INTERVAL 1 DAY); + +DROP TEMPORARY TABLE IF EXISTS tmp_stat_account; +CREATE TEMPORARY TABLE tmp_stat_account ( + sort_no INT NOT NULL, + account VARCHAR(45) NOT NULL, + PRIMARY KEY (account) +); + +INSERT INTO tmp_stat_account (sort_no, account) VALUES +(1, 'zhanghu01'), +(2, 'zhanghu02'), +(3, 'zhanghu03'), +(4, 'zhanghu04'), +(5, 'zhanghu05'), +(6, 'zhanghu06'), +(7, 'zhanghu07'), +(8, 'zhanghu08'), +(9, 'zhanghu09'), +(10, 'zhanghu10'), +(11, 'zhanghu11'), +(12, 'zhanghu12'), +(13, 'zhanghu13'), +(14, 'zhanghu14'), +(15, 'zhanghu15'), +(16, 'zhanghu16'); + +DROP TEMPORARY TABLE IF EXISTS tmp_stat_user; +CREATE TEMPORARY TABLE tmp_stat_user AS +SELECT u.id, u.account, u.real_name, u.tenant_id, u.is_deleted, a.sort_no +FROM blade_user u +INNER JOIN tmp_stat_account a ON a.account = u.account; + +ALTER TABLE tmp_stat_user ADD PRIMARY KEY (id); +ALTER TABLE tmp_stat_user ADD INDEX idx_tmp_stat_user_account (account); + +DROP TEMPORARY TABLE IF EXISTS tmp_stat_detail; +CREATE TEMPORARY TABLE tmp_stat_detail ( + create_user BIGINT NOT NULL, + module_sort INT NOT NULL, + module_name VARCHAR(32) NOT NULL, + biz_sort INT NOT NULL, + biz_name VARCHAR(64) NOT NULL, + table_name VARCHAR(64) NOT NULL, + cnt BIGINT NOT NULL, + KEY idx_tmp_stat_detail_user (create_user) +); + +-- 每张表单独插入。MySQL 不允许同一条语句多次打开临时表。 +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 1, '客商类型', 'blade_customer_type', COUNT(*) +FROM blade_customer_type t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 2, '费用项', 'blade_fee_item', COUNT(*) +FROM blade_fee_item t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 3, '币种汇率管理', 'blade_currency', COUNT(*) +FROM blade_currency t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 4, '计量单位', 'blade_measurement_unit', COUNT(*) +FROM blade_measurement_unit t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 5, '货物类型', 'blade_cargo_type', COUNT(*) +FROM blade_cargo_type t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 6, '行政区划', 'blade_region', COUNT(*) +FROM blade_region t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 7, '港口码头主数据', 'blade_port_terminal', COUNT(*) +FROM blade_port_terminal t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 8, '空港机场主数据', 'blade_airport_master', COUNT(*) +FROM blade_airport_master t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 9, '铁路车站主数据', 'blade_railway_station', COUNT(*) +FROM blade_railway_station t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 1, '基础配置', 10, '保险OCR识别模板', 'blade_insurance_ocr_template', COUNT(*) +FROM blade_insurance_ocr_template t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 2, '基础数据', 1, '常用地址', 'blade_common_address', COUNT(*) +FROM blade_common_address t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 3, '客商管理', 1, '客商档案', 'blade_customer_archive', COUNT(*) +FROM blade_customer_archive t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 4, '项目管理', 1, '项目管理', 'blade_project_apply', COUNT(*) +FROM blade_project_apply t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 4, '项目管理', 2, '临时额度管理', 'blade_temporary_credit_limit', COUNT(*) +FROM blade_temporary_credit_limit t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 5, '合同模块', 1, '合同管理', 'blade_contract_manage', COUNT(*) +FROM blade_contract_manage t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 1, '常用货物', 'blade_common_cargo', COUNT(*) +FROM blade_common_cargo t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 2, '常用线路', 'blade_common_route', COUNT(*) +FROM blade_common_route t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 3, '发货模板', 'blade_shipping_template', COUNT(*) +FROM blade_shipping_template t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 4, '过程配置', 'blade_process_config', COUNT(*) +FROM blade_process_config t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 5, '总单管理', 'blade_master_order', COUNT(*) +FROM blade_master_order t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 6, '运输计划', 'blade_transport_plan', COUNT(*) +FROM blade_transport_plan t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 7, '配载管理', 'blade_loading_manage', COUNT(*) +FROM blade_loading_manage t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 8, '运单管理', 'blade_waybill', COUNT(*) +FROM blade_waybill t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 6, '业务模块', 9, '凭证管理', 'blade_voucher_manage', COUNT(*) +FROM blade_voucher_manage t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 1, '设备台账', 'blade_equipment_ledger', COUNT(*) +FROM blade_equipment_ledger t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 2, '保险记录', 'blade_insurance_record', COUNT(*) +FROM blade_insurance_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 3, '年检记录', 'blade_annual_inspection_record', COUNT(*) +FROM blade_annual_inspection_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 4, '保养记录', 'blade_vehicle_maintenance_plan', COUNT(*) +FROM blade_vehicle_maintenance_plan t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 5, '维修记录', 'blade_vehicle_maintenance_record', COUNT(*) +FROM blade_vehicle_maintenance_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 6, '违章记录', 'blade_violation_record', COUNT(*) +FROM blade_violation_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 7, '事故记录', 'blade_accident_record', COUNT(*) +FROM blade_accident_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 8, 'ETC记录', 'blade_etc_record', COUNT(*) +FROM blade_etc_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 9, '油电记录', 'blade_oil_electric_record', COUNT(*) +FROM blade_oil_electric_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 10, '里程记录', 'blade_mileage_record', COUNT(*) +FROM blade_mileage_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 11, '换胎记录', 'blade_tire_replacement_record', COUNT(*) +FROM blade_tire_replacement_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 12, '其他费用记录', 'blade_other_expense_record', COUNT(*) +FROM blade_other_expense_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 13, '变更记录', 'blade_transport_change_record', COUNT(*) +FROM blade_transport_change_record t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 7, '车/船务模块', 14, '评分量化表', 'blade_credit_score_quantification', COUNT(*) +FROM blade_credit_score_quantification t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 8, '运力模块', 1, '车辆管理', 'blade_transport_vehicle', COUNT(*) +FROM blade_transport_vehicle t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 8, '运力模块', 2, '船舶管理', 'blade_transport_ship', COUNT(*) +FROM blade_transport_ship t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 8, '运力模块', 3, '司机管理', 'blade_transport_driver', COUNT(*) +FROM blade_transport_driver t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user +; + +INSERT INTO tmp_stat_detail (create_user, module_sort, module_name, biz_sort, biz_name, table_name, cnt) +SELECT t.create_user, 8, '运力模块', 4, '车辆调度', 'blade_transport_vehicle_dispatch', COUNT(*) +FROM blade_transport_vehicle_dispatch t +INNER JOIN tmp_stat_user u ON u.id = t.create_user +WHERE t.create_time >= @stat_start AND t.create_time < @stat_end_exclusive +GROUP BY t.create_user; + +-- 结果 1:账号匹配情况。用户 ID 为空表示库中没有该账号。 +SELECT + a.sort_no AS `序号`, + a.account AS `账号`, + u.id AS `用户ID`, + u.real_name AS `姓名`, + u.tenant_id AS `租户`, + CASE WHEN u.id IS NULL THEN '未找到' WHEN u.is_deleted = 0 THEN '正常' ELSE '已删除' END AS `账号状态` +FROM tmp_stat_account a +LEFT JOIN tmp_stat_user u ON u.account = a.account +ORDER BY a.sort_no, u.id; + +-- 结果 2:按账号、模块汇总创建数量。 +SELECT + a.account AS `账号`, + IFNULL(GROUP_CONCAT(DISTINCT NULLIF(u.real_name, '') ORDER BY u.id SEPARATOR '、'), '') AS `姓名`, + IFNULL(SUM(CASE WHEN d.module_name = '基础配置' THEN d.cnt ELSE 0 END), 0) AS `基础配置`, + IFNULL(SUM(CASE WHEN d.module_name = '基础数据' THEN d.cnt ELSE 0 END), 0) AS `基础数据`, + IFNULL(SUM(CASE WHEN d.module_name = '客商管理' THEN d.cnt ELSE 0 END), 0) AS `客商管理`, + IFNULL(SUM(CASE WHEN d.module_name = '项目管理' THEN d.cnt ELSE 0 END), 0) AS `项目管理`, + IFNULL(SUM(CASE WHEN d.module_name = '合同模块' THEN d.cnt ELSE 0 END), 0) AS `合同模块`, + IFNULL(SUM(CASE WHEN d.module_name = '业务模块' THEN d.cnt ELSE 0 END), 0) AS `业务模块`, + IFNULL(SUM(CASE WHEN d.module_name = '车/船务模块' THEN d.cnt ELSE 0 END), 0) AS `车/船务模块`, + IFNULL(SUM(CASE WHEN d.module_name = '运力模块' THEN d.cnt ELSE 0 END), 0) AS `运力模块`, + IFNULL(SUM(d.cnt), 0) AS `合计` +FROM tmp_stat_account a +LEFT JOIN tmp_stat_user u ON u.account = a.account +LEFT JOIN tmp_stat_detail d ON d.create_user = u.id +GROUP BY a.sort_no, a.account +ORDER BY a.sort_no; + +-- 结果 3:按账号、功能展开,只显示创建数量大于 0 的项。 +SELECT + a.account AS `账号`, + d.module_name AS `模块`, + d.biz_name AS `功能`, + d.table_name AS `数据表`, + SUM(d.cnt) AS `创建数量` +FROM tmp_stat_account a +INNER JOIN tmp_stat_user u ON u.account = a.account +INNER JOIN tmp_stat_detail d ON d.create_user = u.id +GROUP BY a.sort_no, a.account, d.module_sort, d.module_name, d.biz_sort, d.biz_name, d.table_name +ORDER BY a.sort_no, d.module_sort, d.biz_sort;