私は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;
結果のテーブル:
ただし、テーブル全体ではなく、カテゴリのパーセンテージを計算する必要があります。短い待機のパーセンテージの合計が100に等しくなるように、長い待機の場合も同じです。私はそれをこのようにしたい:
待っている | is_cancelled | 分 |
---|---|---|
短い待機 | 0 | 0.61 |
短い待機 | 1 | 0.39 |
長い待ち時間 | 0 | 0.32 |
長い待ち時間 | 1 | 0.68 |
これを行う方法はありますか?over(待機によるパーティション分割)を使用できることは知っていますが、エラーが発生します
エラーコード:1054。不明な列「待機中」の「ウィンドウパーティション」
ウィンドウ関数を使用して平均を計算し、次に集計します。
select waiting, is_cancelled,
count(*) / sum(count(*)) over(partition by waiting) as ratio
from (
select b.*,
case when days_in_waiting_list > avg(days_in_waiting_list) over()
then 'Long Wait'
else 'Short wait'
end as waiting
from bookings b
) b
group by waiting, is_cancelled
order by waiting, is_cancelled
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加