Top Travellers

Write an SQL query to report the distance traveled by each user. Return the result table ordered by travelled_distance in descending order, if two or more users traveled the same distance, order them by their name in ascending order.

table name: Users, Rides


Solution:

select u.name, sum(isnull(r.distance,0)) as travelled_distance from [Users] as u
left join Rides as r on u.id = r.user_id
group by u.name,u.id
order by travelled_distance desc,u.name

Output:


SQL Script:

CREATE TABLE [dbo].[Rides](
       [id][int] NULL,
       [user_id][int] NULL,
       [distance][int] NULL
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Users]    Script Date: 23-03-2023 13:30:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
       [id]
[int] NULL,
       [name]
[varchar](30) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (1, 1, 120)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (2, 2, 317)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (3, 3, 222)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (4, 7, 100)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (5, 13, 312)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (6, 19, 50)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (7, 7, 120)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (8, 19, 400)
GO
INSERT [dbo].[Rides] ([id], [user_id], [distance]) VALUES (9, 7, 230)
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (1, N'Alice')
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (2, N'Bob')
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (3, N'Alex')
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (4, N'Donald')
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (7, N'Lee')
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (13, N'Jonathan')
GO
INSERT [dbo].[Users] ([id], [name]) VALUES (19, N'Elvis')
GO


Comments (0)