https://www.youtube.com/watch?v=jXKGsMPk1Hg

create table lifts
(
id int
,capacity_kg int
);

insert into lifts values (1, 300);
insert into lifts values (2, 350);

create table lift_passengers
(
passenger_name varchar(50)
,weight_kg int
,lift_id int
);

insert into lift_passengers values ('Rahul', 85, 1);
insert into lift_passengers values ('Adarsh', 73, 1);
insert into lift_passengers values ('Riti', 95, 1);
insert into lift_passengers values ('Dheeraj', 80, 1);
insert into lift_passengers values ('Vimal', 83, 2);
insert into lift_passengers values ('Neha', 77, 2);
insert into lift_passengers values ('Priti', 73, 2);
insert into lift_passengers values ('Himanshi', 85, 2);

Pasted image 20241124160349.png

WITH
CASE WHEN
GROUP_CONCAT()

WITH CTE AS (
select * 
	,CASE WHEN SUM(weight_kg) OVER (partition by lift_id order by weight_kg) < capacity_kg then 1 else 0 end as flag
from lifts l
JOIN lift_passengers pass on l.id = pass.lift_id 
)
SELECT lift_id,group_concat(passenger_name separator ',') AS Passengers FROM cte where flag = 1
GROUP BY lift_id

Pasted image 20241124160404.png