【问题标题】:oracle - sum on a subquery?oracle - 对子查询求和?
【发布时间】:2009-04-23 18:58:48
【问题描述】:

想知道是否有人可以帮助我理解如何总结单列的列,即将成本列表合并为一个总成本。

我一直在研究这个问题,我认为我在正确理解我需要对查询求和,将其视为子查询。但是我运气不好 - 我需要给子查询一个别名,还是直接将查询包装在一个总和中?

这是我想总结的有效查询,为了清楚起见,我所有的求和尝试都省略了!

SELECT TICKET_TYPE.PRICE AS TOTALSALES, RESERVATION.RESERVATION_ID,
       CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
    FROM RESERVATION, TICKET, TICKET_TYPE, CINEMA, PERFORMANCE
    WHERE TICKET_TYPE.TICKET_TYPE_ID = TICKET.TICKET_TYPE_ID
      AND TICKET.RESERVATION_ID = RESERVATION.RESERVATION_ID
      AND RESERVATION.PERFORMANCE_ID = PERFORMANCE.PERFORMANCE_ID
      AND CINEMA.LOCATION = 'sometown'
      AND PERFORMANCE.PERFORMANCE_DATE = to_date('01/03/2009','DD/MM/yyyy');

一些数据...

TOTALSALES RESERVATION_ID LOCATION PERFORMANCE_DATE
    2.8     1     sometown     01-MAR-09
    3.5     2     sometown     01-MAR-09
    2.8     3     sometown     01-MAR-09
    2.8     3     sometown     01-MAR-09
    2.8     3     sometown     01-MAR-09
    2       4     sometown     01-MAR-09
    2.8     5     sometown     01-MAR-09 

谢谢!

【问题讨论】:

  • 目前没有任何东西将 CINEMA 与 PERFORMANCE 表联系起来,没有 PK/FK 关系,所以这会导致一些问题......

标签: sql oracle


【解决方案1】:

试试:

如果您想要每个 ID 的总数,您需要包含一个分组依据。

SELECT SUM(TICKET_TYPE.PRICE) AS TOTALSALES
          , RESERVATION.RESERVATION_ID
          , CINEMA.LOCATION
          , PERFORMANCE.PERFORMANCE_DATE
       FROM RESERVATION
          , TICKET
          , TICKET_TYPE
          , CINEMA
          , PERFORMANCE
      WHERE TICKET_TYPE.TICKET_TYPE_ID = TICKET.TICKET_TYPE_ID 
        AND TICKET.RESERVATION_ID = RESERVATION.RESERVATION_ID 
        AND RESERVATION.PERFORMANCE_ID = PERFORMANCE.PERFORMANCE_ID 
        AND CINEMA.LOCATION = 'sometown' 
        AND PERFORMANCE.PERFORMANCE_DATE = to_date('01/03/2009','DD/MM/yyyy');
     GROUP BY RESERVATION.RESERVATION_ID

****和上面的答案差不多,我需要在发帖前更好地刷新****

【讨论】:

  • 嗨 - 感谢 cmets - 真的很有帮助,当我使用 sql 时,我现在可以得到输出来总结预订总销售额,这是朝着正确方向迈出的一步 - 但我'我的目标是每一行的总和显示整个期间的总和,所以基本上我最后会有一个总和很大的一行。
  • 我想我现在可能已经破解了,我在选择中取出了 reservation_id 并将其从组中取出(我已将所有选择字段放入)一旦我这样做似乎正在工作。感谢您的理解帮助!
【解决方案2】:

您可以将单个列与

相加

从 mytable 中选择 sum(mycolumn)

当您在选择列表中将聚合器(例如 sum()、count())与字段混合时,您会更改查询的含义。您必须包含一个 GROUP BY 子句,并且该子句必须包含选择列表的每个非聚合部分。

您可以在嵌套子查询中单独进行求和,然后在外部选择中包含该输出...

【讨论】:

  • 感谢您的建议,我觉得我现在明白了,一切正常。
【解决方案3】:

您首先需要知道的是查询的“非求和部分”应该是什么。

您想计算 X 与 Y 的总和(例如,按月计算的销售额总和)。 Y 可以是任意数量的字段,并且生成的数据集将包含 Y 字段的每个不同组合的一条记录。

一旦您知道我们可以帮助您编写查询。

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多