【问题标题】:How to sort this query from monday first to friday last?如何从星期一到星期五对这个查询进行排序?
【发布时间】:2020-11-27 09:18:21
【问题描述】:

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

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

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    我会推荐:

    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()to_char()to_char() 在这里就足够了,因为你只关心白天部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多