SQL

SQL-запрос Вывести идентификаторы всех владельцев комнат

Вывести идентификаторы всех владельцев комнат, что размещены на сервисе бронирования жилья и сумму, которую они заработали
Поля в результирующей таблице:owner_id total_earn
Используйте конструкцию "as owner_id" и "as total_earn" для вывода идентификаторов владельцев и заработанной суммы соответственно. У меня получился следующий запрос:
select u.id as owner_id , SUM( rs.total ) as total_earn from Users u
join Rooms r on r.owner_id=u.id
JOIN Reservations rs on u.id =rs.user_id GROUP by u.id
но ответ неверный, подскажите в чем ошибка?
 SELECT
r.owner_id AS owner_id
, e.total_earn AS total_earn
FROM (
SELECT
room_id
, SUM(total) AS total_earn
FROM Reservations
GROUP BY room_id
) AS e
JOIN Rooms AS r
ON e.room_id = r.id;

-- 2-й вариант с постгруппировкой

SELECT
rms.owner_id AS owner_id
, SUM(total) AS total_earn
FROM Reservations AS res
JOIN Rooms AS rms
ON res.room_id = rms.id
GROUP BY 1;
IM
Isatai Majitov
22 178
Лучший ответ
Александр Шимчук оба варианта выдают неверный ответ и разные значения(
Nurlan Aidarbekov Неправильный ответ!
В целом выглядит верно
Попробуйте убрать join rooms, в reservations уже есть user_id
И возможно суммировать надо не total, а price, вы не указали что есть каждое поле
SELECT owner_id,
IF(SUM(total) IS NULL, 0, SUM(total)) AS total_earn
FROM Reservations
RIGHT JOIN Rooms ON Rooms.id = room_id
GROUP BY owner_id
Eugene Kurdyukov
Eugene Kurdyukov
329
select Rooms.owner_id as owner_id,
IFNULL(SUM( Reservations.total ),0) as total_earn
from Rooms
LEFT join Reservations
on Reservations.room _id=Rooms.id
GROUP by owner_id
WITH KAKA AS (
SELECT room_id, SUM(Total) as kaka FROM Reservations
GROUP BY room_id
)
SELECT owner_id, COALESCE(SUM(kaka), 0) as total_earn FROM Rooms
LEFT JOIN KAKA ON KAKA.room _id = Rooms.id
GROUP BY owner_id
select distinct owner_id ,
ifnull(sum(total_amt ) over (partition by owner_id ), 0) as total_earn
from (
select owner_id ,
room_id,
sum(total ) as total_amt
from Reservations re
right join Rooms ro on ro.id = re.room _id
group by owner_id , room_id ) t
SELECT owner_id,
COALESCE(SUM( re.total ),0) total_earn
from Reservations re
RIGHT join Rooms ro
on ro.id = re.room _id
GROUP by 1
Это задача с sql-academy.org № 69

Вывести идентификаторы всех владельцев комнат, что размещены на сервисе бронирования жилья и сумму, которую они заработали
Поля в результирующей таблице:
owner_id
total_earn
Используйте конструкцию "as owner_id" и "as total_earn" для вывода идентификаторов владельцев и заработанной суммы соответственно.
Проблема в том что задача сформулирована криво.

Для решения нужно вывести вообще всех владельцев комнат вне зависимости от того сдавали они комнату или нет. И если не сдавали то в поле total_earn нужно вывести 0
WITH
tt AS
(SELECT DISTINCT owner_id, SUM(s) as total_earn
FROM
Rooms RIGHT JOIN
(
SELECT DISTINCT room_id, SUM(total) as s
FROM Reservations GROUP BY room_id
) as t
ON Rooms.id = t.room _id
GROUP BY owner_id
ORDER BY owner_id),

ttt AS
(SELECT DISTINCT Rooms.owner_id, tt.total _earn
FROM tt RIGHT JOIN Rooms
ON tt.owner_id = Rooms.owner_id )


SELECT owner_id, 0 as total_earn FROM ttt
WHERE ISNULL(total_earn)
UNION
SELECT owner_id, total_earn FROM ttt
WHERE NOT ISNULL(total_earn)
ORDER BY owner_id