创建视图表时如何多次使用COUNT?

时间:2015-12-07 00:53:50

标签: mysql sql

所以,我正在尝试使用以下信息创建一个View Table:EventCode,事件名称,节目数量,屏幕成本,总筛选成本(节目数量*筛选成本),促销成本,生产成本,总成本(总屏幕成本+促销成本+生产成本),预期 收入(使用BaseTicketPrice),实际收入,给定的总折扣(预期收入 - 实际收入)和利润(所有成本 - 实际收入)。

因此,此视图中涉及大量信息数学。

此外,信息来自多个表格,大约4个。

我必须找到表格EventShow中显示的节目数量,然后我必须在后面的等式中使用节目数量。如何构造表的计数,然后在方程式/聚合中再次使用它?

我意识到我下面的内容确实不正确,但我现在主要在COUNT部分挣扎。

    CREATE OR REPLACE VIEW TicketDetails AS
    SELECT
        E.EventCode,
        E.EventName,
        E.EventShows Count(*) as NumberOfShows,
       (E.ScreeningCost * NumberOfShows) as TotalScreeningCost,
       (E.BaseTicketPrice * Ticket(Count(*))) as ExpectedRevenue,
        E.PromotionCost,
        E.ProductionCost,
       (TotalScreeningCost + E.PromotionCost + E.ProductionCost) as TotalCost,
       (E.BaseTicketPrice * TS.TicketsSolds) as ActualRevenue, 
       (ExpectedRevenue - ActualRevenue) as TotalDiscounts
       (TotalCost - ActualRevenue) as Profit
        FROM Event E, Ticket T, TicketSale TS, EventShow ES
        WHERE (E.EventCode = TS.EventCode);

1 个答案:

答案 0 :(得分:0)

选择列表是在sql中执行的最后一个子句。选择列表中定义的任何别名只能在order by和having子句中引用,但不能在select list或where子句中引用。

另一个问题是,如果您连接多个表,则无法使用count(*)count(tablename.*)计算从其中一个表返回的行,因此您必须使用该表中不能使用的字段如果从该表返回一行,则为null - 这应该是您加入表的字段。基于表格的简化示例:

select e.eventcode, e.eventname, count(es.eventcode) as numberofshows, e.screeningcosts*count(es.eventcode) as totalscreeningcosts
from events e left join eventshows es
on e.eventcode=es.eventcode
group by e.eventcode, e.eventname, e.screeningcosts

我假设2个表各有一个事件代码字段。