#sql #sql-server
Вопрос:
SELECT hotel, SUM(stays_in_weekend_nights) AS 'total weekend night'
FROM hotel_bookings
GROUP BY hotel;
Гостиница | total_weekend_nights | total_week_nights |
---|---|---|
Городской Отель | 63082 | 173174 |
Курортный Отель | 47664 | 125337 |
Я хочу показать результаты сверху в процентах, а не в цифрах, которые вы видите. Я пытался использовать:
SELECT
hotel,
stays_in_weekend_nights * 100/ SUM(stays_in_weekend_nights) OVER() 'Percentage'
Однако это дает мне только процент от каждого отдельного бронирования, а это не то, что я хочу. Есть какие-нибудь предложения?
Комментарии:
1. Непонятно, о чем вы спрашиваете. Вы спрашиваете, сколько ночей в выходные по сравнению с ночами в будние дни в отеле? Или % от общего числа ночей в выходные и будние дни по всем отелям? Можете ли вы показать желаемые результаты в табличном формате?
Ответ №1:
То, что вы написали, дает процент от указанного столбца.
Если вам нужен процент строки, вы должны явно указать, какие столбцы вы добавляете вместе.
SELECT
hotel,
SUM(stays_in_weekend_nights) AS [total weekend night],
SUM(stays_in_week_nights) AS [total week night],
SUM(stays_in_weekend_nights) * 100.0 / SUM(stays_in_weekend_nights stays_in_week_nights) AS [% weekend night],
SUM(stays_in_week_nights) * 100.0 / SUM(stays_in_weekend_nights stays_in_week_nights) AS [% week night]
FROM
hotel_bookings
GROUP BY
hotel;
Вы можете избежать некоторого повторения с подзапросами или общими табличными выражениями…
WITH
totals AS
(
SELECT
hotel,
SUM(stays_in_weekend_nights) AS [total weekend night],
SUM(stays_in_week_nights) AS [total week night]
FROM
hotel_bookings
GROUP BY
hotel
)
SELECT
*,
[total weekend night] * 100.0 / ([total week night] [total weekend night]) AS [% weekend night],
[total week night] * 100.0 / ([total week night] [total weekend night]) AS [% week night]
FROM
totals
Могут быть даже другие (лучшие) варианты, если вы покажете нам, как выглядят исходные данные.