【发布时间】:2021-06-01 22:59:10
【问题描述】:
我的数据库有关于出租车服务的信息。我需要在 sql 代码中创建一个语句(我正在使用 mysql),该语句确定注册服务数量相对于上个月的百分比变化。
我的列是日期类型:“tpep_pickup_datetime”,格式如下:2020-01-01 00:33:03。
由于第一个月没有和谁比较,所以“variacion_mes_anterior”列的结果必须为NULL,我不知道该怎么做。
我正在使用但对我不起作用的代码语句是:
SELECT DATE_FORMAT(tpep_pickup_datetime, '%Y-%m') as mes, COUNT(id) as servicios,
CONCAT(
( SELECT TRUNCATE((count(test.id)/count(t.id) -1) *100, 0)
FROM test AS t
GROUP BY DATE_FORMAT(t.tpep_pickup_datetime, '%Y-%m')
LIMIT 1
) , "%") as variacion_mes_anterior
FROM test
GROUP BY DATE_FORMAT(tpep_pickup_datetime, '%Y-%m')
ORDER BY DATE_FORMAT(tpep_pickup_datetime, '%Y-%m');
例子:
| id | tpep_pickup_datetime |
|---|---|
| 0 | 2020-01-01 00:33:03 |
| 1 | 2020-01-02 00:33:03 |
| 2 | 2020-01-03 00:33:03 |
| 3 | 2020-02-01 00:33:03 |
| 4 | 2020-02-02 00:33:03 |
| 5 | 2020-02-03 00:33:03 |
| 6 | 2020-02-04 00:33:03 |
对于我的问题,有效的 sql 语句会出现这种情况
| mes | servicios | variacion_mes_anterior |
|---|---|---|
| 2020-01 | 3 | NULL |
| 2020-02 | 4 | 33% |
【问题讨论】:
-
能否提供一些示例数据和所需的输出
-
variacion_mes_anteriorfor2020-02是 100%,因为当前和上个月 (2000-1000=1000) 之间的差异等于上个月值 (100% * (2000-1000)/1000)?使用一些粗略的值。 -
@Akina 是的,这正是我想应用于我的问题,但我的 sql 代码对我不起作用
-
variacion_mes_anterior = CONCAT(100 * (servicios / LAG(servicios) OVER (ORDER BY mes) - 1), '%')。当然,用它们的表达式替换输出列的名称。 -
@Sergey 修改问题并添加示例
标签: mysql sql percentage