Application Express PL SQL Group by Function

时间:2014-09-26 00:55:33

标签: sql oracle oracle-apex

我正在尝试使用group by来获取一份列出每日总销售额的报告。所以期望的输出看起来像这样:

  • 2014年1月13日星期一$ 550
  • 2014年1月14日星期二$ 600

    2014年1月14日星期二$ 600

当我使用以下代码时:

SELECT
  tix.user_id,
  tix.timestamp,
  tix.event_id,
  tixp.Price AS "Total Sales"
FROM LS_tickets tix
LEFT OUTER JOIN LS_ticket_prices tixP
  ON tixP.event_ID = tix.event_ID
WHERE
  tix.event_id = 12181

查询返回一个表但白天没有提供TOTALS。它提供每个单独的销售。所以我尝试按如下方式修改它:

SELECT
  tix.user_id,
  tix.timestamp,
  tix.event_id,
  sum(tixp.Price AS "Total Sales")
FROM LS_tickets tix
LEFT OUTER JOIN LS_ticket_prices tixP
  ON tixP.event_ID = tix.event_ID
WHERE
  tix.event_id = 12181
GROUP BY tix.timestamp

我收到以下错误:

无法解析查询,请检查查询的语法。 (ORA-00936:表达式缺失)

1 个答案:

答案 0 :(得分:2)

如果您想要按天计算总数,那么您需要按天分组。假设timestamp是日期数据类型:

SELECT trunc(tix.timestamp) as thedate,
       sum(tixp.Price) AS "Total Sales"
FROM LS_tickets tix LEFT OUTER JOIN
     LS_ticket_prices tixP
     ON tixP.event_ID = tix.event_ID
WHERE tix.event_id = 12181
GROUP BY trunc(tix.timestamp)
ORDER BY 1;

您可以使用to_char()获取所需的特定日期格式。此格式可能适合您:

SELECT to_char(tix.timestamp, 'DY MM DD, YYYY') as thedate,
       sum(tixp.Price) AS "Total Sales"
FROM LS_tickets tix LEFT OUTER JOIN
     LS_ticket_prices tixP
     ON tixP.event_ID = tix.event_ID
WHERE tix.event_id = 12181
GROUP BY to_char(tix.timestamp, 'DY MM DD, YYYY') 
ORDER BY 1;