1

我想订购此查询并获取本周每天的门票金额,结果如下:

WEEK_DAY      CREATED_TICKETS
MONDAY        3
TUESDAY       5
WEDNESDAY     0
FRIDAY        2

SELECT 
  TO_CHAR(TRUNC(CREATED_AT), 'DAY') AS WEEK_DAY,
  COUNT(ID) as CREATED_TICKETS
FROM
  FRESHDESK_API
WHERE
  TO_CHAR(TRUNC(CREATED_AT), 'IW') = TO_CHAR(TRUNC(SYSDATE), 'IW')
GROUP BY
  TO_CHAR(TRUNC(CREATED_AT), 'DAY')
ORDER BY
  TO_CHAR(TRUNC(CREATED_AT), 'DAY') ASC
4

1 回答 1

2

我会推荐:

select to_char(created_at, 'day') as week_day, count(*) as created_tickets
from freshdesk_api
where created_at >= trunc(sysdate, 'iw') and created_at < trunc(sysdate, 'iw') + 7
group by to_char(created_at, 'day')
order by min(created_at)

诀窍是在order by应用于date列的子句中使用聚合函数。

您的查询的其他更改:

  • 我优化了where子句,因此没有对要过滤的列应用日期函数;这更有效(有人说谓词是SARGable

  • 据推测,所谓的东西id是不可为空的,所以count(*)相当于count(id)(并且更有效,因为数据库不需要检查null每个值)

  • 无需嵌套trunc()and to_char(); to_char()在这里就足够了,因为您只关心白天的部分

于 2020-11-27T09:21:52.160 回答