子查询显示多于一行
subquery shows more that one row group by
我正在尝试获取铁路预订系统中最佳 5 位客户的数据。为此,我尝试通过在他们每次预订时汇总他们的票价来获得最大值。这是代码。
SELECT c. firstName, c.lastName,MAX(r.totalFare) as Fare
FROM customer c, Reservation r, books b
WHERE r.resID = b.resID
AND c.username = b.username
AND r.totalfare < (SELECT sum(r1.totalfare) Revenue
from Reservation r1, for_res f1, customer c1,books b1
where r1.resID = f1.resID
and c1.username = b1.username
and r1.resID = b1.resID
group by c1.username
)
GROUP BY c.firstName, c.lastName, r.totalfare
ORDER BY r.totalfare desc
LIMIT 5;
这会引发错误:[21000][1242] 子查询 returns 多于 1 行
如果我从子查询中删除分组依据,结果是:(它是一个表格形式)
Jade,Smith,1450
Jade,Smith,725
Jade,Smith,25.5
Monica,Geller,20.1
Rach,Jones,10.53
但这不是我想要的,如您所见,我想在总票价中添加名称'Jade'。
我只是不明白子查询的意义所在。看起来你可以用 sum()
得到你想要的结果
select c.firstname, c.lastname, sum(totalfare) as totalfare
from customer c
inner join books b on b.username = c.username
inner join reservation r on r.resid = b.resid
group by c.username
order by totalfare desc
limit 5
这会汇总每个客户的所有预订,并使用该信息对结果进行排序。这保证每个客户一行。
查询假设username
是tablecustomer
的主键。如果不是这种情况,您需要将列 firstname
和 lastname
添加到 group by
子句。
请注意,这使用标准连接(使用 inner join ... on
关键字)而不是老式的隐式连接(在 from
子句中使用逗号:这些是遗留语法,不应该在新代码中使用。
我正在尝试获取铁路预订系统中最佳 5 位客户的数据。为此,我尝试通过在他们每次预订时汇总他们的票价来获得最大值。这是代码。
SELECT c. firstName, c.lastName,MAX(r.totalFare) as Fare
FROM customer c, Reservation r, books b
WHERE r.resID = b.resID
AND c.username = b.username
AND r.totalfare < (SELECT sum(r1.totalfare) Revenue
from Reservation r1, for_res f1, customer c1,books b1
where r1.resID = f1.resID
and c1.username = b1.username
and r1.resID = b1.resID
group by c1.username
)
GROUP BY c.firstName, c.lastName, r.totalfare
ORDER BY r.totalfare desc
LIMIT 5;
这会引发错误:[21000][1242] 子查询 returns 多于 1 行
如果我从子查询中删除分组依据,结果是:(它是一个表格形式)
Jade,Smith,1450
Jade,Smith,725
Jade,Smith,25.5
Monica,Geller,20.1
Rach,Jones,10.53
但这不是我想要的,如您所见,我想在总票价中添加名称'Jade'。
我只是不明白子查询的意义所在。看起来你可以用 sum()
select c.firstname, c.lastname, sum(totalfare) as totalfare
from customer c
inner join books b on b.username = c.username
inner join reservation r on r.resid = b.resid
group by c.username
order by totalfare desc
limit 5
这会汇总每个客户的所有预订,并使用该信息对结果进行排序。这保证每个客户一行。
查询假设username
是tablecustomer
的主键。如果不是这种情况,您需要将列 firstname
和 lastname
添加到 group by
子句。
请注意,这使用标准连接(使用 inner join ... on
关键字)而不是老式的隐式连接(在 from
子句中使用逗号:这些是遗留语法,不应该在新代码中使用。