mysql 先有一张 gx_cyxqtb_day日发电量表 rq为日期 drzfdl为日发电量 年所需发电总量为100 请编写sql统计 当前年每月完成的累计进度百分比 和累计总量
时间: 2024-03-06 21:49:48 浏览: 80
mysql 查询当天、本周,本月,上一个月的数据
好的,针对您的问题,我可以给出以下 SQL 语句:
```sql
SELECT
DATE_FORMAT(rq, '%Y-%m') AS month,
ROUND(SUM(drzfdl) / 100 * 100, 2) AS cumulative_progress_percentage,
ROUND(SUM(SUM(drzfdl)) OVER (ORDER BY DATE_FORMAT(rq, '%Y-%m')), 2) AS cumulative_amount
FROM
gx_cyxqtb_day
WHERE
YEAR(rq) = YEAR(CURDATE())
GROUP BY
DATE_FORMAT(rq, '%Y-%m')
```
该语句会统计当前年份中每个月的累计完成进度百分比和累计总量,其中 `gx_cyxqtb_day` 表为日发电量表,包含日期 `rq` 和日发电量 `drzfdl` 两个字段。年所需发电总量为100。
解释一下上述 SQL 语句中的各个部分:
- `DATE_FORMAT(rq, '%Y-%m') AS month`:将日期 `rq` 格式化为年月格式,以便按月分组统计。
- `ROUND(SUM(drzfdl) / 100 * 100, 2) AS cumulative_progress_percentage`:计算当前月的累计完成进度百分比,公式为当前月累计发电量除以年所需发电总量,再乘以100。使用 `ROUND` 函数将结果保留两位小数。
- `ROUND(SUM(SUM(drzfdl)) OVER (ORDER BY DATE_FORMAT(rq, '%Y-%m')), 2) AS cumulative_amount`:计算当前月的累计发电量,并使用窗口函数 `SUM() OVER (ORDER BY DATE_FORMAT(rq, '%Y-%m'))` 按月份顺序累计求和。使用 `ROUND` 函数将结果保留两位小数。
- `WHERE YEAR(rq) = YEAR(CURDATE())`:筛选出当前年份的数据。
- `GROUP BY DATE_FORMAT(rq, '%Y-%m')`:按照年月分组统计。
希望以上 SQL 语句对您有所帮助!
阅读全文