【发布时间】:2021-03-22 15:23:47
【问题描述】:
我在 MySQL 工作。 最初我有一个如下所示的表格:
我的任务是计算等待时间长的人和等待时间短的人取消预订的百分比。 经过一些操作,我想出了以下代码:
SELECT
CASE WHEN days_in_waiting_list > (SELECT AVG(days_in_waiting_list) FROM Bookings) THEN 'Long wait'
ELSE 'Short wait'
END AS waiting,
is_canceled, COUNT(*), count(*) * 100.0 / sum(count(*)) over() AS perc_cancelled
FROM Bookings
GROUP BY waiting, is_canceled;
结果表:
但我希望计算类别的百分比,而不是整个表格。因此,Short wait 中的百分比总和等于 100,Long wait 也是如此。我希望它是这样的:
| waiting | is_cancelled | perc |
|---|---|---|
| Short wait | 0 | 0.61 |
| Short wait | 1 | 0.39 |
| Long wait | 0 | 0.32 |
| Long wait | 1 | 0.68 |
有没有办法做到这一点?我知道可以使用 over(partition by waiting),但它给了我错误
错误代码:1054。“window partition by”中的未知列“waiting”
【问题讨论】:
-
@Strawberry 对不起,我不知道该怎么做,但我会研究这个话题,谢谢!
标签: mysql sql count aggregate-functions percentage