Uma tabela dinâmica é uma ferramenta poderosa para estimar, compilar e revisar dados para encontrar padrões e tendências ainda mais fáceis. As tabelas de articulação podem ser usadas para agregar, classificar, organizar, reorganizar, grupo, total ou dados médios em um conjunto de dados para compreender verdadeiramente associações e dependências de dados. Usar uma tabela dinâmica como ilustração é a maneira mais fácil de demonstrar como esse método opera. PostgreSQL 8.3 foi lançado alguns anos atrás e uma nova versão chamada 'tabelafunc' foi adicionado. Tabelafunc é um componente que contém vários métodos que produzem tabelas (ou seja, várias linhas). Esta modificação vem com uma gama muito legal de recursos. O método Crosstab, que será usado para criar tabelas dinâmicas, está entre elas. O método Crosstab pega um argumento textual: um comando SQL que retorna dados brutos no primeiro layout e retorna uma tabela no layout subsequente.
Exemplo de tabela pivô sem tabelafunc:
Para começar a trabalhar no pivotamento do PostgreSql com o módulo 'TableFunc', você precisa tentar fazer uma tabela de pivô sem ele. Então, vamos abrir o shell da linha de comando postgreSQL e fornecer os valores dos parâmetros para o servidor, banco de dados, número de porta, nome de usuário e senha necessários. Deixe esses parâmetros vazios se você quiser usar os parâmetros selecionados padrão.
Estaremos criando uma nova tabela chamada 'teste' no banco de dados 'teste' com alguns campos, conforme exibido abaixo.
>> Crie teste de tabela (id int, nome Varchar (20), Sal Int, Job Varchar (20));Depois de criar uma tabela, é hora de inserir alguns valores na tabela, como mostrado na consulta abaixo.
>> Insira no teste (id, nome, sal, emprego) valores (11, 'aqsa', 45000, 'writer'), (11, 'aqsa', 48000, 'oficial'), (11, 'aqsa', 50000, 'Doctor'), (12, 'Raza', 40000, 'Officer'), (11, 'Raza', 60000, 'Doctor'), (12, 'Raza', 67000, 'Oficial'), ( 13, 'Saeed', 85000, 'Writer'), (13, 'Saeed', 69000, 'Officer'), (13, 'Saeed', 90000, 'Doctor');Você pode ver que os dados relevantes foram inseridos com sucesso. Você pode ver que esta tabela tem mais de 1 dos mesmos valores para ID, nome e trabalho.
>> selecione * da entrada;Vamos criar uma tabela pivô, que resumirá o registro da tabela 'teste' usando a consulta abaixo. O comando mescla os mesmos valores da coluna 'ID' e 'Nome' em uma linha enquanto toma a soma dos valores de 'salário' para os mesmos dados de acordo com 'id' e 'nome'. Também está dizendo quantas vezes ocorreu um valor no conjunto específico de valores.
>> Selecione ID, nome, Sum (Sal) Sal, Sum ((Job = 'Doctor') :: Int) Doutor, Sum ((Job = 'Writer') :: Int) Writer, Sum ((Job = 'Officer ') :: int) "Oficial" do grupo de teste por id, nome;Exemplo de tabela pivô com tabelafunc:
Começaremos explicando nosso ponto principal do ponto de vista realista e depois descreveremos a criação da tabela de pivô em etapas que gostamos. Então, antes de tudo, você precisa adicionar três mesas para trabalhar em um pivô. A primeira tabela que vamos criar é 'maquiagem', que armazenará informações sobre os itens essenciais de maquiagem. Experimente a consulta abaixo no shell da linha de comando para criar esta tabela.
>> Crie a tabela se não existe maquiagem (make_id int primária chave, p_name varchar (100) não nula);Após a criação da tabela 'maquiagem', vamos adicionar alguns registros a ela. Estaremos executando a consulta listada abaixo no shell para adicionar 10 registros a esta tabela.
Precisamos criar outra tabela chamada 'Usuários', que manterá os registros dos usuários usando esses produtos. Execute a consulta abaixo do estado no shell para criar esta tabela.
>> Crie a tabela, se não existe usuários (User_id int Primary Key, u_name varchar (100) não nulo);Inserimos os 20 registros para a tabela 'usuários', como mostrado na imagem abaixo.
Temos outra tabela, 'makeup_user', que manterá os registros mútuos da tabela de 'maquiagem' e 'usuários'. Tem outro campo, 'preço', que economizará o preço do produto. A tabela foi gerada usando a consulta declarada abaixo.
>> Crie a tabela, se não existe maquieup_user (id int primária, mid int não referências nulas maquiagem (make_id), uid int não referências nulas usuários (user_id), preço decimal (18,2));Inserimos um total de 56 registros nesta tabela, como mostrado na imagem.
Vamos criar uma visão mais adiante para usá -la para a geração de uma tabela dinâmica. Essa visualização está usando a junção interna para corresponder aos valores da coluna da chave primária de todas as três tabelas e buscar o 'nome', 'product_name' e o 'custo' de um produto de uma tabela 'clientes'
>> Crie view v_makeup_users como selecione C.u_name, p.P_NAME, PC.Preço dos usuários C Inner Junção Makeup_User PC em C.user_id = pc.Uid interno junção maquiagem p no pc.MID = p.make_id;Para usar isso, você deve primeiro instalar o pacote TableFunc para o banco de dados que deseja usar. Este pacote está embutido PostGresql 9.1 e posteriormente lançado executando o comando abaixo do ponto em que. O pacote TableFunc foi ativado para você agora.
>> Crie extensão se não existe tabelafunc;Depois de criar a extensão, é hora de usar a função CrosStab () para criar uma tabela dinâmica. Então, usaremos a seguinte consulta no shell da linha de comando para fazer isso. Esta consulta está buscando primeiro o registro da recém -criada 'View'. Esses registros serão ordenados e agrupados pela ordem ascendente das colunas 'u_name' e 'p_name'. Listamos o nome de maquiagem para cada cliente, que eles compraram, e o custo total dos produtos comprados na tabela. Aplicamos o sindicato todos os operadores na coluna 'P_Name' para resumir todos os produtos comprados por um cliente separadamente. Isso resumirá todos os custos dos produtos comprados por um usuário em um valor.
Nossa tabela de pivô está pronta e exibida na imagem. Você pode ver claramente que alguns espaços de coluna estão vazios abaixo de cada nome P_ porque eles não compraram esse produto em particular.
Conclusão:
Agora aprendemos brilhantemente a criar uma tabela de pivô para resumir os resultados das tabelas com e sem o uso do pacote TableFunc.