我正在使用在线编辑器来解决查询
https://www.jdoodle.com/execute-sql-online/
有如下SQL表
create table CITIES(id int, name String);
create table USERS(id int, city_id String, name String, email);
create table RIDES(id int, user_id int, distance int, fare int);
INSERT INTO CITIES (id, name) VALUES
(1,"Cooktown"),
(2,"South Suzanne");
INSERT INTO USERS (id, city_id, name, email) VALUES
(1,2,"a","email"),
(2,2,"b","email"),
(3,1,"c","email"),
(4,1,"d","email"),
(5,1,"e","email"),
(5,1,"f","email");
INSERT INTO RIDES (id, user_id, distance, fare) VALUES
(1,1,21,200),
(2,3,6,55),
(3,2,30,230),
(4,2,16,125),
(5,2,11,110),
(6,6,30,285),
(7,3,18,170),
(8,1,6,50),
(9,2,4,40),
(10,1,10,90),
(11,5,11,95),
(12,5,16,140),
(13,4,24,220),
(14,6,17,160),
(15,2,23,205),
(16,2,11,90),
(17,6,5,50),
(18,3,19,180),
(19,5,22,205),
(20,4,6,60);
输出应该是:
南苏珊娜 1050
库克敦 1710
我尝试了以下 SQL 查询,但不知道如何计数
select c.name, SUM(r.fare) from CITIES c
left join USERS u on c.id=u.city_id
left join RIDES r on u.id=r.user_id
获取以下输出
库克敦|2705
任何帮助将不胜感激
最佳答案
看起来您缺少 GROUP BY:
SELECT c.name, SUM(r.fare) [SumOfFare]
FROM CITIES c
LEFT JOIN USERS u ON c.id=u.city_id
LEFT JOIN RIDES r ON u.id=r.user_id
GROUP BY c.name
ORDER BY SUM(r.fare) ASC;
此外,您可能还想添加一个 ORDER BY 子句,这样您就可以在顶部看到收入最低的位置。
关于SQL 收入最低的地点计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60984221/