子查询显示多于一行

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的主键。如果不是这种情况,您需要将列 firstnamelastname 添加到 group by 子句。

请注意,这使用标准连接(使用 inner join ... on 关键字)而不是老式的隐式连接(在 from 子句中使用逗号:这些是遗留语法,不应该在新代码中使用。