首页 > 解决方案 > 为什么 ORDER BY 在 Presto 查询中不起作用?

问题描述

我有一个相当简单的 Presto 查询,它不是按我指定的列排序:

(SELECT 
  tag_monitor_domains.property_name,
  count(*) as HourCount
FROM pageviews
  INNER JOIN tag_monitor_domains 
  ON pageviews.property_id = CAST(tag_monitor_domains.property_id AS varchar) 
WHERE FROM_UNIXTIME(pageviews.time) > date_add('month', -1, CURRENT_DATE)
AND FROM_UNIXTIME(pageviews.time) < date_add('hour', -0, CURRENT_TIMESTAMP)
GROUP BY 1
ORDER BY 1 DESC)

但结果不是按 property_name 排序的,行是随机的。

标签: tsqlprestotrinotreasure-data

解决方案


感谢@DShultz 的报告。确实是这样,我为此报告了https://github.com/trinodb/trino/issues/6008。让我们继续讨论这是期望的行为还是错误的行为。

作为一种解决方法....好吧,删除括号。但这你已经知道了。

出现这种情况的更一般的原因是——Presto忽略了 ORDER BY,它不会改变查询的语义(例如在子查询中),这是由 SQL 规范管理的。有关更多信息,请参阅https://trino.io/blog/2019/06/03/redundant-order-by.html


推荐阅读