SQL

SQL запрос Найдите какой процент пользователей, зарегистрированных на сервисе бронирования

Найдите какой процент пользователей, зарегистрированных на сервисе бронирования, хоть раз арендовали или сдавали в аренду жилье. Результат округлите до сотых.
Поля в результирующей таблице: percent
Используйте конструкцию "as percent" для вывода процента активных пользователей. Пример, формата ответ - 65.23 .У меня получилось так:
select ROUND(SUM(T.c)*100/(select count(id) from Users),2)
as percent
from
(SELECT COUNT(user_id) as c FROM Reservations
union SELECT COUNT(r.owner_id) as c
FROM Rooms r
join Reservations re
on r.id = re.room _id) T
Но ответ неверный, подскажите в чем ошибка?
Ошибка в том, что ты хрень какую-то считаешь. Тебе надо тупо количество уникальных user_id поделить на общее количество пользователей, а ты развел какие-то джойны, суммы и все прочее. Просто не делай так.
PK
Pavel Kunchik
51 427
Лучший ответ
Заирбек Хамитов SELECT
ROUND(100*COUNT(DISTINCT r.user_id)/COUNT( u.id ), 2)
as percent
from Reservations r join users u
on r.user_id = u.id
Если вы имели ввиду так, то ответ неверный, user_id это арендаторы, а нам нужны еще и арендодатели
https://sql-academy.org/ru/trainer/tasks/71 ссылка на задание
 WITH active_users AS ( 
SELECT rs.user_id, rm.owner_id
FROM Reservations AS rs
JOIN Rooms AS rm
ON rs.room_id = rm.id
),
active_users_unique AS (
SELECT DISTINCT user_id AS id
FROM active_users
UNION
SELECT DISTINCT owner_id AS id
FROM active_users
)

SELECT
ROUND(100.0 * COUNT(id) / (SELECT DISTINCT COUNT(id) FROM Users), 2) AS percent
FROM active_users_unique;
ЮГ
Юрий Гуменюк
22 178
 WITH Table1 AS ( 
(
SELECT user_id
FROM Reservations
GROUP BY user_id
)
UNION
(
SELECT owner_id
FROM Reservations
JOIN Rooms ON room_id = Rooms.id
GROUP BY owner_id
)
)
SELECT ROUND(COUNT(Table1.user_id) * 100 / COUNT(Users.id), 2) AS percent
FROM Users
LEFT JOIN Table1 ON Table1.user_id = Users.id
Игорь **********
 SELECT ROUND(COUNT(alluser.user_id) / COUNT(Users.id) * 100, 2) as percent 
FROM (
SELECT DISTINCT user_id
FROM Reservations
UNION
SELECT DISTINCT owner_id
FROM Rooms
JOIN Reservations on Reservations.room_id = Rooms.id
) as alluser
RIGHT JOIN Users on Users.id = alluser.user_id
SELECT ROUND((select count (DISTINCT a.uid)
from
(SELECT user_id as uid, Reservations.id as res_id
FROM Reservations
LEFT JOIN Rooms on Reservations.room _id = Rooms.id
UNION
SELECT owner_id as uid, Reservations.id as res_id
FROM Reservations
LEFT JOIN Rooms on Reservations.room _id = Rooms.id ) as a
)/COUNT(id)*100,2) as percent
FROM Users
WITH active AS (
SELECT DISTINCT user_id
FROM Reservations
UNION
SELECT DISTINCT owner_id
FROM Rooms
JOIN Reservations ON Reservations.room _id = Rooms.id )

SELECT ROUND(((SELECT COUNT(*) FROM active) / COUNT(*) * 100), 2) AS percent
FROM Users