【问题标题】:sum statement in sqlsql中的sum语句
【发布时间】:2013-07-28 15:49:55
【问题描述】:
=======================================
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";

我可以知道如何计算总计(每个航班的商务舱、经济舱和头等舱的总和)吗?

【问题讨论】:

  • 你所说的“GrandTotal”是什么意思?
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • @Akinaru 每个航班的商务、经济和头等舱总和
  • @a_horse_with_no_name MYSQL

标签: mysql sql select sum


【解决方案1】:

您的查询版本在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;

【讨论】:

  • 谢谢!!!! u 帮我解决我的问题!我非常感谢它....我会再次了解更多关于它的信息!=)
  • +1 更好地理解问题。我赶上了 OP 的最后一行 :)
  • F36712 商务 480 1305 经济 375 1305 头等 450 1305 总计只能显示一次吗?没有必要重复显示工作
  • 通常,要显示一次“总计”,您可以使用 rollup 并将其放在单独的行上。在这种情况下,您可以有条件地将其放在“第一”行,但该行可能会被过滤掉,具体取决于座位可用性。
  • @GordonLinoff 我该怎么做?
【解决方案2】:

因为,您需要 GrandTotal 是您不能在 GROUP BY 中拥有 SeatType 的每个航班的所有商务舱、经济舱和头等舱座位的总和。

$sql = "SELECT FlightID, SUM(SeatPrice) AS Total
        FROM seat 
        WHERE SeatAvailable = 'Yes'
        GROUP BY FlightID";

【讨论】:

  • 但我需要用 GrandTotal 显示每个航班的 SeatType 数量 ....izit 可以这样做吗?
  • @Khai 是的,当然可以,但一开始就明确提出您的要求会有所帮助。您能否使用您希望查询收到的示例结果集更新您的问题?
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多