=======================================
Flight SeatType Price GrandTotal
=======================================
F36712 Business $480
Economy $375
First $450 ?
F12314 Business $100
Economy $200
First $300 ?
我试过这个SQL:
$sql = "SELECT FlightID,SeatType, sum(SeatPrice)Total
FROM seat
WHERE SeatAvailable = 'Yes'
GROUP BY FlightID,SeatType, SeatPrice";
请问如何计算总计(每个航类的商务舱、经济舱和头等舱的总和)?
最佳答案
您的查询版本在 group by
中有 SeatPrice
。这意味着您将获得每个座位价格的单独一行。我假设您想获得每组 SeatType
的总数:
SELECT FlightID,SeatType, sum(SeatPrice) as Total
FROM seat
WHERE SeatAvailable = 'Yes'
GROUP BY FlightID, SeatType with rollup;
但是,这并没有将总计放在一个单独的列中。再一次,大多数版本的 SQL 都支持窗口函数来执行此操作:
SELECT FlightID,SeatType, sum(SeatPrice) as Total,
sum(sum(SeatPrice)) over (partition by FlightId)
FROM seat
WHERE SeatAvailable = 'Yes'
GROUP BY FlightID, SeatType;
编辑:
MySQL 不支持窗口函数。您可以对连接和聚合执行相同的操作:
SELECT s.FlightID, s.SeatType, sum(s.SeatPrice) as Total, f.GrandTotal
FROM seat s join
(select FlightId, sum(SeatPrice) as GrandTotal
from seat
where SeatAvailable = 'Yes'
group by FlightId
) f
on s.FlightId = f.FlightId
WHERE s.SeatAvailable = 'Yes'
GROUP BY s.FlightID, s.SeatType;
关于mysql - sql中的求和语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910010/