BDDAD Bases de Dados Linguagem SQL Comando SELECT de Resultados Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/12
Introdução Sumário Funções de Agregação Básicas COUNT SUM MIN MAX AVG Cláusulas de GROUP BY HAVING Nelson Freire (ISEP LEI-BDDAD 2015/16) 2/12
Interesse Obter informação agregada (i.e., resumida) sobre grupos de registos do resultado de um SELECT Exemplos Tabela Empregado (instância) de Resultados Grupo Lisboa Grupo Porto Total de empregados por localidade Grupo Braga Cláusula GROUP BY: Especifica agrupamento pela localidade. Tabela dividida em grupos pela localidade. Função de Agregação COUNT: Conta os registos de cada grupo. Nelson Freire (ISEP LEI-BDDAD 2015/16) 3/12
Funções Aplicadas a uma simples coluna duma tabela. Retornam um simples valor. Interesse Obter informação agregada (i.e., resumida) sobre: Todos os registos.. especificados na cláusula WHERE Grupos de registos especificados na cláusula GROUP BY Exemplo Função COUNT Tabela: EMPREGADOS(..., NOME,..., LOCALIDADE,...) Informação agregada de todos os registos Funções de Agregação Informação agregada de cada grupo de registos NULL ignorado 1/4 Funções de Agregação podem ser aplicadas com ou sem agrupamento (GROUP BY) Nome coluna alterado Nelson Freire (ISEP LEI-BDDAD 2015/16) 4/12
Tipos Mais Vulgares Funções de Agregação 2/4 Função Formato Resultado Observação COUNT COUNT(*) Número total de registos do resultado/grupo de resultados do SELECT COUNT(coluna) COUNT (DISTINCT coluna) Número de valores diferentes de NULL na coluna especificada. Número de valores diferentes na coluna especificada. Ignora NULL Não conta repetidos Ignora NULL MAX MAX(coluna) Maior valor da coluna especificada. Aplicada também a MIN MIN(coluna) Menor valor da coluna especificada. colunas do tipo string, usando uma comparação alfabética. Ignora NULL SUM SUM(coluna) Soma dos valores da coluna especificada. Aplicáveis apenas a AVG AVG(coluna) Média dos valores da coluna especificada. colunas numéricas. Ignora NULL Funções aplicadas a uma simples coluna Palavra-reservada DISTINCT Para eliminar duplicados antes de aplicar função Pode ser usado em todas as funções Especificada antes do nome da coluna Como no exemplo do COUNT Nelson Freire (ISEP LEI-BDDAD 2015/16) 5/12
Exemplos Funções de Agregação DISTINCT ignora NULL 3/4 Possível aplicar múltiplas funções. Mostrada um linha de resultados. Nelson Freire (ISEP LEI-BDDAD 2015/16) 6/12
Legal nas Cláusulas SELECT HAVING Ilegal Na cláusula WHERE como operando Exemplo Funções de Agregação 4/4 Solução Com SELECT encaixado (subquery) Na cláusula SELECT Lista de colunas (fora de funções) e funções de agregação sem GROUP BY para agrupar os dados, conjuntamente. Exemplo: Nelson Freire (ISEP LEI-BDDAD 2015/16) 7/12
Cláusulas GROUP BY // agrupa registos duma tabela HAVING // filtra grupos da tabela final Cláusulas de SELECT [ ALL DISTINCT ] <lista select> FROM <lista de tabela> [WHERE <condição_where>] [GROUP BY <lista groupby>] [HAVING <condição having>] [ORDER BY <lista orderby> [ DESC ASC ] ] Nelson Freire (ISEP LEI-BDDAD 2015/16) 8/12
Sintaxe Cláusula GROUP BY SELECT [ ALL DISTINCT ] <lista select> FROM <lista de tabela> [WHERE <condição_where>] [GROUP BY <lista groupby>] [HAVING <condição having>] [ORDER BY <lista orderby> [ DESC ASC ] ] 1/2 <lista groupby> ::= { table_name view_name table_alias }.* { column_name expression }, [, n] Interesse Agrupar informação Dividir o resultado de um SELECT em grupos de resultados para serem processados por funções de agregação. Deve Especificar Todas as colunas seleccionadas (no SELECT) exceto colunas em funções de agregação SGBD precisa de saber como agrupar o resultado do SELECT Cada Item do SELECT Deve ser um simples valor para cada grupo Valores NULL Também são agrupados numa coluna Colunas do GRUPO BY: Não têm de existir no SELECT. Com Cláusula WHERE WHERE é executado em 1º Grupos formados depois com registos filtrados Nelson Freire (ISEP LEI-BDDAD 2015/16) 9/12
Exemplos Cláusula GROUP BY 2/2 Tabela PREMIOS Nelson Freire (ISEP LEI-BDDAD 2015/16) 10/12
Criada Para trabalhar conjuntamente com GROUP BY Sintaxe Cláusula HAVING SELECT [ ALL DISTINCT ] <lista select> FROM <lista de tabela> [WHERE <condição_where>] [GROUP BY <lista groupby>] [HAVING <condição having>] [ORDER BY <lista orderby> [ DESC ASC ] ] 1/2 <condição having> ::= condição com expressões, constantes ou colunas incluídas na <lista groupby> Interesse Restringir os grupos que surgem no resultado final. i.e, filtrar os grupos. Aplicada Sobre os resultados dos grupos. Nomes de colunas Incluídas em GROUP BY Ou usadas em funções de agregação. Condição Inclui sempre pelo menos uma função de agregação. Senão pode ser colocada em WHERE Colunas do GRUPO BY: Não têm de existir no SELECT. Nelson Freire (ISEP LEI-BDDAD 2015/16) 11/12
Exemplos Cláusula HAVING 2/2 Nelson Freire (ISEP LEI-BDDAD 2015/16) 12/12