mysql - sql中的求和语句

标签 mysql sql select sum

=======================================
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/

相关文章:

sql - 如何获取Oracle SQL表中未使用/可用的主键(主键范围从1到999)的列表?

mysql - 如何将查询更改为嵌套选择?

sql - 选择并为 2 列上具有相同值的唯一 ID 创建新 ID

SQL 选择表 1 或表 2

php - MySQL 中的外来字符处理

php - 制作 PHP 数据库驱动的多项选择测验时遇到麻烦

php - MySQL在一个事务中从多对多表中删除和删除

php - mysql select缓存优化

sql - 如何使用 Print 语句打印 VARCHAR(MAX)?

jQuery 仅选择与祖 parent 具有相同类别的直接父级