Agrupamento avançado

All lectures for PT purposes
Nível 1 , Lição 161
Disponível

5.1 Declaração TER

Existe outro operador útil no SQL que é usado com GROUP BY, chamado HAVING.

Em seu significado, é completamente análogo ao operador WHERE. Ele permite apenas WHEREdefinir um filtro de linha antes do agrupamento e, com a ajuda, HAVINGvocê pode definir um filtro que é aplicado aos registros após o agrupamento.

A visão geral da consulta ao usar agrupamento e filtragem de resultados de agrupamento é a seguinte:

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition

HAVINGsó pode ser usado se a solicitação contiver GROUP BY.

Vamos escrever uma consulta onde exibimos o número de funcionários contratados por ano.

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

E o resultado desta consulta:

contrato_ano total
2012 1
2013 1
2014 1
2015 2
2018 1

E agora excluímos dela os anos em que um ou menos funcionários foram contratados. Exemplo:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1

E o resultado desta consulta:

contrato_ano total
2015 2

5.3 Ordem de execução das declarações

Para escrever consultas SQL corretas e eficientes, você precisa entender como elas são executadas pelo servidor SQL.

O procedimento para realizar ações é estritamente regulamentado e não depende do seu desejo. Você não pode reorganizar os operadores e obter uma ordem diferente.

A consulta SQL é executada em vários estágios nesta ordem.

  1. Estágio 1 - buscando linhas
    • Primeiro, todas as linhas da tabela especificada são selecionadas.
    • Em seguida, os campos calculados são adicionados a eles.
    • E então, de todas as linhas, apenas aquelas que satisfazem a condição permanecemWHERE
  2. Fase 2 - agrupamento
    • O agrupamento é então aplicado aos resultados.
    • Durante o agrupamento, campos como COUNT(*).
    • Finalmente, um filtro é aplicado ao resultado do agrupamento HAVING.
  3. Fase 3 - classificação
    • As linhas obtidas nas etapas anteriores são classificadas usando ORDER BY.

Finalmente, o resultado pode ser aparado com LIMITe OFFSET.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION