Como preservar a lógica ORDER BY com vários CTEs
Tenho uma Query, no Trino Enginee, que estou criando varias CTEs, mas estou perdendo a lógica do ORDER BY ao adicionar os CTEs
É tipo isso:
WITH AS CTE1(...)
CTE2 AS (.....ORDEM POR 2)
CTE3 AS(...)
CTE4 AS(...)
SELECT * FROM CTE4 ORDER BY 2
Quero saber como fazer com que o resultado final tenha a mesma ordem do primeiro ORDER BY? Desse jeito que estou fazendo ele retorna diferente
Eu ja tentei botar o mesmo ORDER BY em todas as CTES e continua o mesmo conflito
Estou usando a enginee bd Trino, não tenho muito conhecimento sobre isso, preciso de ajuda
É tipo isso:
WITH AS CTE1(...)
CTE2 AS (.....ORDEM POR 2)
CTE3 AS(...)
CTE4 AS(...)
SELECT * FROM CTE4 ORDER BY 2
Quero saber como fazer com que o resultado final tenha a mesma ordem do primeiro ORDER BY? Desse jeito que estou fazendo ele retorna diferente
Eu ja tentei botar o mesmo ORDER BY em todas as CTES e continua o mesmo conflito
Estou usando a enginee bd Trino, não tenho muito conhecimento sobre isso, preciso de ajuda
Thiago Melo
Curtidas 0
Respostas
Arthur Heinrich
04/07/2024
O order by deve ser utilizado apenas na query final, que retorna os dados. Se você utiliza dentro de uma CTE, o banco interpreta o conteúdo da CTE como uma tabela sem índice e os joins geralmente utilizam HASH JOIN ou MERGE SORT, que modifica a ordem.
Uma coisa que você pode tentar é sempre retornar as colunas do order by original a cada CTE dependente da primeira, para que ao chegar na query final, você possa utilizar o order by por elas, mesmo que as colunas não sejam retornadas.
Porém, isto nem sempre é possível. Se no meio do caminho ocorrem agregações, parte da informação é perdida, podendo inviabilizar a "gambiarra".
Uma coisa que você pode tentar é sempre retornar as colunas do order by original a cada CTE dependente da primeira, para que ao chegar na query final, você possa utilizar o order by por elas, mesmo que as colunas não sejam retornadas.
Porém, isto nem sempre é possível. Se no meio do caminho ocorrem agregações, parte da informação é perdida, podendo inviabilizar a "gambiarra".
GOSTEI 0