SQL 收入最低的地点计数

标签 sql

我正在使用在线编辑器来解决查询

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/

相关文章:

java - 如何将 ResulSet 的多个值放入 Java 对象中

python - 查询在查询浏览器中运行良好,但在 python 代码中运行不佳

java - 带有 @Transactional 的 EntityManager persist() 不会抛出 DataIntegrityViolationException

c# - 唯一列,检查现有记录,最佳方法

java - Android 中的 SQLITE 获取语句不起作用

sql - 删除早于 N 天的记录的存储过程

mysql - 找不到mySQL请求错误

mysql - 在 MySQL 中使用 CAST() 将 VARCHAR 转换为 CHAR,但最终结果仍然是 VARCHAR 而不是 CHAR

mysql - GROUP CONCAT 由于某种原因不工作

sql - 等待还是现在?就是那个问题。 PostgreSQL 与甲骨文