Como ordenar o resultado de uma subconsulta com ORDER BY no SQL

Ao realizar consultas complexas no SQL, subconsultas são uma técnica altamente eficaz. No entanto, ao querer ordenar o resultado de uma subconsulta em uma ordem específica, é preciso tomar cuidado ao utilizar a cláusula ORDER BY. Neste artigo, explicaremos em detalhes como ordenar o resultado de uma subconsulta utilizando ORDER BY.

Índice

Uso básico de subconsultas

Uma subconsulta é uma consulta que é usada dentro de outra consulta. Subconsultas são cercadas por parênteses e utilizadas como parte de instruções SQL como SELECT, INSERT, UPDATE e DELETE. O uso de subconsultas permite construir consultas mais complexas e extrair dados com base em condições específicas.

Estrutura básica de uma subconsulta

Uma subconsulta possui a seguinte estrutura:

SELECT column1, column2
FROM (SELECT column1, column2 FROM table WHERE condition) AS subquery_alias;

Como mostrado acima, é possível executar uma nova consulta utilizando os resultados de outra consulta por meio de subconsultas.

Uso básico de ORDER BY

A cláusula ORDER BY é utilizada para ordenar o conjunto de resultados de uma consulta em uma ordem específica. Normalmente, os dados são classificados em ordem ascendente (ASC) ou descendente (DESC).

Estrutura básica da cláusula ORDER BY

A cláusula ORDER BY é colocada no final da instrução SELECT e é utilizada da seguinte forma:

SELECT column1, column2
FROM table
WHERE condition
ORDER BY column1 ASC, column2 DESC;

Exemplo de uso de ORDER BY

Por exemplo, a seguinte consulta obtém os nomes dos funcionários da tabela employees, ordenados em ordem alfabética:

SELECT first_name, last_name
FROM employees
ORDER BY last_name ASC, first_name ASC;

Com o uso da cláusula ORDER BY, é possível organizar o conjunto de resultados na ordem desejada.

Restrições ao usar ORDER BY em subconsultas

Há algumas restrições ao usar a cláusula ORDER BY dentro de subconsultas. Em particular, se a subconsulta não retornar diretamente o resultado, a cláusula ORDER BY não terá efeito.

Invalidação da cláusula ORDER BY em subconsultas

Mesmo que uma cláusula ORDER BY seja usada dentro de uma subconsulta, a consulta externa pode ignorar essa ordem. Por exemplo, na consulta abaixo, a cláusula ORDER BY na subconsulta é ignorada:

SELECT *
FROM (SELECT first_name, last_name FROM employees ORDER BY last_name) AS subquery;

Nesse caso, como a consulta externa não contém uma cláusula ORDER BY, o conjunto de resultados permanece sem ordenação.

Considerações ao usar ORDER BY em subconsultas

O uso de ORDER BY dentro de uma subconsulta só é aplicável quando combinado com cláusulas como TOP ou LIMIT. Por exemplo, podemos utilizá-lo com a cláusula LIMIT da seguinte forma:

SELECT *
FROM (SELECT first_name, last_name FROM employees ORDER BY last_name LIMIT 10) AS subquery;

Nesse caso, a ordenação é realizada dentro da subconsulta e os 10 primeiros resultados são retornados para a consulta externa.

Como ordenar o resultado de uma subconsulta com ORDER BY

Para ordenar o resultado de uma subconsulta em uma ordem específica, é necessário utilizar a cláusula ORDER BY na consulta externa. Dessa forma, todo o conjunto de resultados da subconsulta será ordenado.

Método básico para ordenar o resultado de uma subconsulta

Primeiro, recupera-se os dados necessários na subconsulta e, em seguida, utiliza-se a cláusula ORDER BY na consulta externa para ordenar o resultado. Veja um exemplo abaixo:

SELECT *
FROM (
    SELECT first_name, last_name, hire_date
    FROM employees
    WHERE department_id = 10
) AS subquery
ORDER BY hire_date DESC;

Nessa consulta, são recuperados os funcionários com department_id igual a 10 na subconsulta, e o resultado é ordenado por hire_date em ordem descendente.

Exemplo prático

Por exemplo, para obter as vendas de uma categoria específica e ordenar o resultado pelo valor total de vendas, podemos utilizar a seguinte consulta:

SELECT product_name, total_sales
FROM (
    SELECT product_name, SUM(sales_amount) AS total_sales
    FROM sales
    WHERE category = 'Electronics'
    GROUP BY product_name
) AS subquery
ORDER BY total_sales DESC;

Nessa consulta, o total de vendas para a categoria Electronics é calculado e o resultado é ordenado em ordem decrescente de vendas.

Dicas ao usar ORDER BY em subconsultas

Mesmo que a cláusula ORDER BY seja usada dentro de uma subconsulta, ela não será respeitada pela consulta externa. Portanto, sempre use a cláusula ORDER BY na consulta externa para garantir a ordenação correta dos resultados da subconsulta.

Exemplos de consultas SQL com subconsultas

A seguir estão alguns exemplos de consultas SQL que utilizam subconsultas, o que ajuda a entender como combinar subconsultas com a cláusula ORDER BY.

Ordenação de funcionários por data de contratação

A consulta abaixo exibe os funcionários de um determinado departamento ordenados por data de contratação:

SELECT first_name, last_name, hire_date
FROM (
    SELECT first_name, last_name, hire_date
    FROM employees
    WHERE department_id = 10
) AS subquery
ORDER BY hire_date DESC;

Essa consulta extrai os funcionários com o department_id igual a 10 na subconsulta e os ordena por data de contratação em ordem decrescente.

Ordenação de dados de vendas

A consulta a seguir agrega os dados de vendas de uma categoria de produto específica e os ordena pelo valor total de vendas:

SELECT product_name, total_sales
FROM (
    SELECT product_name, SUM(sales_amount) AS total_sales
    FROM sales
    WHERE category = 'Electronics'
    GROUP BY product_name
) AS subquery
ORDER BY total_sales DESC;

Nessa consulta, o total de vendas para cada produto na categoria Electronics é calculado e o resultado é ordenado em ordem decrescente de vendas.

Lista de clientes com o pedido mais recente

A consulta abaixo recupera a lista de clientes com suas datas de pedidos mais recentes e os ordena por data do pedido:

SELECT customer_name, last_order_date
FROM (
    SELECT customer_name, MAX(order_date) AS last_order_date
    FROM orders
    GROUP BY customer_name
) AS subquery
ORDER BY last_order_date DESC;

Essa consulta obtém a data do pedido mais recente de cada cliente na subconsulta e ordena o resultado por data do pedido em ordem decrescente.

Produtos principais por categoria ordenados por vendas

A consulta abaixo obtém os produtos principais de cada categoria com base nas vendas e os exibe em ordem de vendas:

SELECT category, product_name, total_sales
FROM (
    SELECT category, product_name, total_sales,
           ROW_NUMBER() OVER (PARTITION BY category ORDER BY total_sales DESC) AS rank
    FROM (
        SELECT category, product_name, SUM(sales_amount) AS total_sales
        FROM sales
        GROUP BY category, product_name
    ) AS subquery
) AS ranked_products
WHERE rank = 1
ORDER BY total_sales DESC;

Essa consulta classifica os produtos de cada categoria com base no valor total de vendas, seleciona o produto principal e o ordena em ordem decrescente de vendas.

Com esses exemplos, agora você deve entender como usar subconsultas e a cláusula ORDER BY em conjunto. O uso correto de subconsultas permite realizar consultas e ordenações complexas de forma eficiente.

Conclusão

Subconsultas são uma ferramenta poderosa na construção de consultas SQL complexas. Elas são particularmente úteis quando é necessário filtrar uma parte dos dados e realizar um processamento adicional com base nesses resultados. No entanto, é importante lembrar que a cláusula ORDER BY dentro de uma subconsulta não afeta a consulta externa. Portanto, a ordenação final deve ser feita na consulta externa para garantir que os resultados da subconsulta sejam exibidos na ordem desejada. A combinação de subconsultas e ORDER BY permite realizar consultas complexas de forma fácil e eficiente.

Índice