MySQL数据库 小数用百分比表示语法

本文介绍了一种将成功率字段转换为百分比形式的方法,并确保只保留两位小数的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


concat(
TRUNCATE (success_rate * 100, 2),              
'%'

   
百分制success_rate 字段,并百分比只保留两位小数

<think>我们根据用户需求创建一个电力营销数据库,包含以下核心字段: 1. 项目名称 2. 项目投产时期(日期类型) 3. 电价(小数类型,适合存储金额) 4. 消纳情况(描述电力消纳情况,可以用文本或枚举) 同时,考虑到电力营销的特点,我们还可以增加一些常用字段: - 项目编号(唯一标识) - 项目类型(如风电、光伏、水电等) - 装机容量(单位:兆瓦) - 年发电量(单位:兆瓦时) - 所属区域 - 运营状态(如运行、建设中、退役等) 根据以上分析,设计表结构如下: 步骤1:创建数据库 ```sql CREATE DATABASE IF NOT EXISTS power_marketing CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 步骤2:使用数据库 ```sql USE power_marketing; ``` 步骤3:创建电力项目表 ```sql CREATE TABLE IF NOT EXISTS power_projects ( project_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '项目唯一标识', project_name VARCHAR(200) NOT NULL COMMENT '项目名称', project_type ENUM('风电', '光伏', '水电', '火电', '核电', '其他') NOT NULL COMMENT '项目类型', installed_capacity DECIMAL(10, 2) COMMENT '装机容量(兆瓦)', annual_generation DECIMAL(12, 2) COMMENT '年发电量(兆瓦时)', grid_date DATE NOT NULL COMMENT '项目投产日期', electricity_price DECIMAL(8, 4) NOT NULL COMMENT '电价(元/千瓦时)', absorption_status ENUM('全额消纳', '部分消纳', '未消纳') COMMENT '消纳情况', region VARCHAR(50) COMMENT '所属区域', operating_status ENUM('运行', '建设中', '规划中', '退役') DEFAULT '运行' COMMENT '运营状态' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='电力项目信息表'; ``` 字段说明: 1. `project_id`:项目ID,自增主键 2. `project_name`:项目名称,非空 3. `project_type`:项目类型,使用枚举类型限制 4. `installed_capacity`:装机容量,最大10位数字(含小数部分2位) 5. `annual_generation`:年发电量,最大12位数字(含小数部分2位) 6. `grid_date`:投产日期,日期类型 7. `electricity_price`:电价,单位元/千瓦时,采用8位数字(含4位小数,可精确到0.0001元) 8. `absorption_status`:消纳情况,枚举类型 9. `region`:所属区域 10. `operating_status`:运营状态,默认值为'运行' 步骤4:插入示例数据 ```sql INSERT INTO power_projects ( project_name, project_type, installed_capacity, annual_generation, grid_date, electricity_price, absorption_status, region, operating_status ) VALUES ('张北风电场一期', '风电', 200.00, 500000.00, '2020-06-30', 0.45, '全额消纳', '河北省张家口市', '运行'), ('宁夏光伏基地', '光伏', 300.50, 480000.00, '2021-12-15', 0.42, '部分消纳', '宁夏回族自治区', '运行'), ('三峡水电站', '水电', 22500.00, 100000000.00, '2003-07-10', 0.25, '全额消纳', '湖北省宜昌市', '运行'); ``` 步骤5:查询数据 ```sql -- 查询所有项目 SELECT * FROM power_projects; -- 按区域统计消纳情况 SELECT region, absorption_status, COUNT(*) AS project_count FROM power_projects GROUP BY region, absorption_status; -- 查询各类型项目的平均电价 SELECT project_type, AVG(electricity_price) AS avg_price FROM power_projects GROUP BY project_type; ``` 注意事项: 1. 电价单位:元/千瓦时(注意与兆瓦时的换算关系,1兆瓦时=1000千瓦时) 2. 枚举字段使用固定选项,确保数据一致性 3. 根据实际需求调整字段长度和精度 如果需要扩展,可以考虑增加以下表: - 电价政策表(不同时期、不同区域的政策电价) - 消纳详情表(按月记录消纳情况) - 项目业主表(关联项目与业主单位) 引用说明:表创建语法参考了标准MySQL创建表的规范[^1]。 §§相关问题§§ 1. 如何为电力营销数据库设计多表关联(如项目与电价政策)? 2. 如何优化电力项目数据的查询性能(特别是区域和类型统计)? 3. 电力营销数据如何实现按月统计消纳量和发电量? 4. 在MySQL中如何备份和恢复电力营销数据库? 5. 如何设计用户权限管理以保护电力营销数据安全?</think>### 使用 MySQL 创建电力营销数据库 根据您的需求,我将创建一个包含项目名称、投产日期、电价、消纳情况等核心字段的电力营销数据库。以下是完整的实现方案: #### 步骤 1:创建数据库 ```sql -- 创建数据库并设置中文支持 CREATE DATABASE IF NOT EXISTS power_marketing CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '电力营销数据库'; ``` #### 步骤 2:选择数据库 ```sql USE power_marketing; ``` #### 步骤 3:创建核心表 - 电力项目表 ```sql CREATE TABLE IF NOT EXISTS power_projects ( project_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '项目唯一ID', project_name VARCHAR(200) NOT NULL COMMENT '项目名称', grid_date DATE NOT NULL COMMENT '项目投产日期', electricity_price DECIMAL(8,4) NOT NULL COMMENT '电价(元/千瓦时)', absorption_rate DECIMAL(5,2) COMMENT '消纳率(百分比)', installed_capacity DECIMAL(10,2) COMMENT '装机容量(兆瓦)', project_type ENUM('风电', '光伏', '水电', '火电', '核电', '其他') NOT NULL COMMENT '项目类型', region VARCHAR(50) NOT NULL COMMENT '所属区域', operating_status ENUM('运行', '建设中', '规划中', '退役') DEFAULT '运行' COMMENT '运营状态', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB COMMENT='电力项目主表'; ``` **字段说明**: 1. `project_id`:自增主键,唯一标识项目 2. `project_name`:项目名称(必填) 3. `grid_date`:项目投产日期(必填) 4. `electricity_price`:电价(精确到0.0001元) 5. `absorption_rate`:消纳情况(百分比值) 6. `installed_capacity`:装机容量 7. `project_type`:项目类型枚举 8. `region`:项目所属区域 9. `operating_status`:运营状态(默认'运行') #### 步骤 4:创建月度数据表(可选扩展) ```sql CREATE TABLE IF NOT EXISTS monthly_data ( record_id INT AUTO_INCREMENT PRIMARY KEY, project_id INT NOT NULL, month_year DATE NOT NULL COMMENT '统计月份(格式:YYYY-MM-01)', generation_amount DECIMAL(12,2) COMMENT '发电量(兆瓦时)', consumption_amount DECIMAL(12,2) COMMENT '消纳量(兆瓦时)', avg_price DECIMAL(8,4) COMMENT '当月平均电价', FOREIGN KEY (project_id) REFERENCES power_projects(project_id) ) ENGINE=InnoDB COMMENT='月度发电消纳数据表'; ``` #### 步骤 5:插入示例数据 ```sql -- 插入电力项目数据 INSERT INTO power_projects ( project_name, grid_date, electricity_price, absorption_rate, installed_capacity, project_type, region ) VALUES ('张北风电场一期', '2020-06-30', 0.4520, 95.50, 200.00, '风电', '河北省'), ('宁夏光伏基地', '2021-12-15', 0.3850, 88.20, 300.50, '光伏', '宁夏回族自治区'), ('三峡水电站', '2003-07-10', 0.2850, 99.80, 22500.00, '水电', '湖北省'); -- 插入月度数据(示例) INSERT INTO monthly_data (project_id, month_year, generation_amount, consumption_amount, avg_price) VALUES (1, '2023-10-01', 48000.50, 45840.25, 0.4550), (2, '2023-10-01', 62500.75, 55100.30, 0.3820); ``` #### 步骤 6:常用查询示例 ```sql -- 查询所有运行中的项目 SELECT * FROM power_projects WHERE operating_status = '运行'; -- 按区域统计平均电价和消纳率 SELECT region, AVG(electricity_price) AS avg_price, AVG(absorption_rate) AS avg_absorption FROM power_projects GROUP BY region; -- 查询特定项目的月度数据 SELECT p.project_name, DATE_FORMAT(m.month_year, '%Y-%m') AS month, m.generation_amount, m.consumption_amount FROM monthly_data m JOIN power_projects p ON m.project_id = p.project_id WHERE p.project_name = '张北风电场一期'; ``` #### 关键设计说明: 1. **电价存储**:使用 `DECIMAL(8,4)` 精确存储到0.0001元 2. **日期处理**:投产日期用 `DATE` 类型,月度数据使用标准化日期格式 3. **枚举约束**:项目类型和运营状态使用 `ENUM` 确保数据一致性[^1] 4. **扩展性**:主表+月度数据表的设计支持历史数据分析 5. **自动时间戳**:`created_at` 和 `updated_at` 自动记录时间变化 #### 数据库维护操作: ```sql -- 添加新项目 INSERT INTO power_projects (...) VALUES (...); -- 更新电价 UPDATE power_projects SET electricity_price = 0.4020 WHERE project_name = '宁夏光伏基地'; -- 添加索引优化查询 CREATE INDEX idx_region ON power_projects(region); CREATE INDEX idx_project_type ON power_projects(project_type); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值