Exercicio de Comandos

Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Exercicio de Comandos

Mensagem por bernardino »

Importe as tabelas para responder.

Código: Selecionar todos

CREATE TABLE funcionarios (
  id_funcionario INTEGER PRIMARY KEY,
  nome VARCHAR(100),
  departamento VARCHAR(100),
  salario NUMERIC(10,2)
);

INSERT INTO funcionarios (id_funcionario, nome, departamento, salario)
VALUES
  (1, 'João Silva', 'TI', 5000.00),
  (2, 'Maria Oliveira', 'RH', 4500.00),
  (3, 'Ana Santos', 'TI', 6000.00),
  (4, 'Pedro Souza', 'Financeiro', 5500.00),
  (5, 'Carla Costa', 'RH', 4800.00);
Liste todos os departamentos.

Código: Selecionar todos

SELECT DISTINCT departamento FROM funcionarios;
Conte quantos funcionários existem em cada departamento.

Código: Selecionar todos

SELECT departamento, COUNT(*) AS num_funcionarios FROM funcionarios GROUP BY departamento;
Calcule a média de salário por departamento.

Código: Selecionar todos

SELECT departamento, AVG(salario) AS media_salarial FROM funcionarios GROUP BY departamento;
Liste os departamentos onde a média salarial é superior a R$5000.

Código: Selecionar todos

SELECT departamento, AVG(salario) AS media_salarial FROM funcionarios GROUP BY departamento HAVING AVG(salario) > 5000;
Liste os departamentos onde a soma total dos salários é superior a R$10000.

Código: Selecionar todos

SELECT departamento, SUM(salario) AS soma_salarial FROM funcionarios GROUP BY departamento HAVING SUM(salario) > 10000;
Liste os departamentos onde nenhum funcionário ganha mais do que R$6000.

Código: Selecionar todos

SELECT departamento FROM funcionarios GROUP BY departamento HAVING MAX(salario) <= 6000;
Conte quantos funcionários ganham mais de R$5000 em cada departamento.

Código: Selecionar todos

SELECT departamento, COUNT(*) AS num_funcionarios_acima_5000 FROM funcionarios WHERE salario > 5000 GROUP BY departamento;
Liste o departamento com o maior número de funcionários.

Código: Selecionar todos

SELECT departamento FROM funcionarios GROUP BY departamento ORDER BY COUNT(*) DESC LIMIT 1;
Liste o nome do funcionário com o maior salário em cada departamento.

Código: Selecionar todos

SELECT f.departamento, f.nome, f.salario
FROM funcionarios f
INNER JOIN (
    SELECT departamento, MAX(salario) AS max_salario
    FROM funcionarios
    GROUP BY departamento
) AS max_salarios
ON f.departamento = max_salarios.departamento
AND f.salario = max_salarios.max_salario;
Liste o departamento com a menor média salarial.

Código: Selecionar todos

SELECT departamento
FROM funcionarios
GROUP BY departamento
ORDER BY AVG(salario) ASC
LIMIT 1;
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Exercicio de Comandos

Mensagem por bernardino »

CREATE TABLE funcionarios(
id_func SERIAL,
nome VARCHAR(50),
cargo VARCHAR(50),
salario NUMERIC(10,2),
dt_inicio DATE,
PRIMARY KEY(id_func)
);

INSERT INTO funcionarios (nome, cargo, salario, dt_inicio)
VALUES('Ana', 'vendedor', 1200, '2021-01-02'),
('Bruna', 'vendedor', 1500, '2021-04-12'),
('Claudia', 'caixa', 3200, '2021-02-10'),
('Fernanda', 'vendedor', 2000, '2021-01-07'),
('Carlos', 'vendedor', 1200, '2021-03-14'),
('Mateus', 'gerente', 4500, '2020-09-10'),
('Daniel', 'vendedor', 1200, '2021-03-14'),
('Julia', 'estoquista', 1350, '2021-05-20'),
('Ana', 'vendedor', 1200, '2021-01-02'),
('Maria', 'vendedor', 1300, '2021-02-02'),
('Caio', 'estoquista', 1300, '2021-09-09'),
('Luis', 'limpeza', 1100, '2021-01-24');

-----


--TOTAL DE SALARIOS PAGOS PARA TODOS OS FUNCIONARIOS
SELECT SUM(salario) AS total_salarios FROM funcionarios;
-- QUAL TOTAL DE SALARIOS PAGOS PARA CADA TIPO DE CARGO
SELECT departamento, salario FROM funcionarios;

SELECT cargo, SUM(salario) FROM funcionarios GROUP BY cargo;

SELECT cargo, SUM(salario) FROM funcionarios GROUP BY cargo ORDER BY cargo;

--TOTAL DE SALÁRIOS PAGOS PARA OS TIPOS DE CARGO
--QUE GANHAM ACIMA DE 3000 ORDENADOS PELO CARGO

SELECT cargo, SUM(salario) FROM funcionarios
GROUP BY cargo
HAVING SUM(salario) >3000
ORDER BY CARGO;

--QUAL TOTAL DE SALARIOS PAGOS PARA OS TIPOS DE CARGO
--QUE POSSUEM DATA DE ADMISSAO DE MARÇO A JUNHO ORDENADOS PELO CARGO
--PRIMEIRO PASSO
SELECT cargo, salario, dt_inicio FROM funcionarios
WHERE dt_inicio BETWEEN '2021-03-01' AND '2021-06-30'
ORDER BY cargo;
--SEGUNDO PASSO APLICAR O AGRUPAMENTO DOS CARGOS SOMANDO OS SALARIOS
SELECT cargo, SUM(salario) FROM funcionarios
WHERE dt_inicio BETWEEN '2021-03-01' AND '2021-06-30'
GROUP BY cargo
ORDER BY cargo;

-- QUAL A QUANTIDADE DE FUNCIONÁRIOS PARA CADA TIPO DE CARGO
SELECT cargo, COUNT(*) FROM funcionarios
GROUP BY cargo

-- QUAIS OS CARGOS QUE POSSUEM MAIS DE UM FUNCIONÁRIO?
SELECT cargo, COUNT(*)
FROM funcionarios GROUP BY cargo
HAVING COUNT(*) > 1;
-- EXIBA OS TIPOS DE CARGOS COM O TOTAL DE SALÁRIOS PAGOS
-- E O NUMERO DE FUNCIONARIOS

SELECT cargo,
SUM(salario),
COUNT(*)
FROM funcionarios
GROUP BY cargo;
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Exercicio de Comandos

Mensagem por bernardino »

-- Tabela de clientes

Código: Selecionar todos

CREATE TABLE clientes (
  id_cliente INT PRIMARY KEY,
  nome VARCHAR(100),
  cidade VARCHAR(50)
);
-- Tabela de pedidos

Código: Selecionar todos

CREATE TABLE pedidos (
  id_pedido INT PRIMARY KEY,
  id_cliente INT,
  data_pedido DATE,
  valor_total DECIMAL(10, 2),
  FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);
-- Inserts para a tabela de clientes

Código: Selecionar todos

INSERT INTO clientes (id_cliente, nome, cidade) VALUES
(1, 'Ana Souza', 'São Paulo'),
(2, 'Bruno Lima', 'Rio de Janeiro'),
(3, 'Carlos Mendes', 'Belo Horizonte'),
(4, 'Daniela Silva', 'São Paulo'),
(5, 'Eduardo Rocha', 'Curitiba');
-- Inserts para a tabela de pedidos

Código: Selecionar todos

INSERT INTO pedidos (id_pedido, id_cliente, data_pedido, valor_total) VALUES
(101, 1, '2025-01-10', 250.00),
(102, 1, '2025-01-15', 100.00),
(103, 2, '2025-01-20', 300.00),
(104, 2, '2025-02-05', 400.00),
(105, 3, '2025-01-22', 150.00),
(106, 3, '2025-03-10', 600.00),
(107, 4, '2025-03-15', 50.00),
(108, 5, '2025-02-25', 120.00),
(109, 5, '2025-02-26', 200.00);

1) Listar a cidade dos clientes e o valor total somado dos pedidos por cidade.

Código: Selecionar todos

SELECT c.cidade, SUM(p.valor_total)
FROM clientes c, pedidos p
WHERE c.id_cliente = p.id_cliente
GROUP BY c.cidade;
2. Listar o nome dos clientes e o total de pedidos realizados por cada um

Código: Selecionar todos

SELECT c.nome, COUNT(p.id_pedido)
FROM clientes c, pedidos p
WHERE c.id_cliente = p.id_cliente
GROUP BY c.nome;
3. Listar os clientes que tenham mais de 1 pedido

Código: Selecionar todos

SELECT c.nome
FROM clientes c, pedidos p
WHERE c.id_cliente = p.id_cliente
GROUP BY c.nome
HAVING COUNT(p.id_pedido) > 1;
4. Mostrar a média de valor total dos pedidos por cliente, apenas para clientes da cidade de "São Paulo"

Código: Selecionar todos

SELECT c.nome, AVG(p.valor_total)
FROM clientes c, pedidos p
WHERE c.id_cliente = p.id_cliente
AND c.cidade = 'São Paulo'
GROUP BY c.nome;
5. Listar os clientes que têm um valor médio de pedidos superior a R$200,00

Código: Selecionar todos

SELECT c.nome
FROM clientes c, pedidos p
WHERE c.id_cliente = p.id_cliente
GROUP BY c.nome
HAVING AVG(p.valor_total) > 200;
6. Mostrar o total de pedidos e a soma dos valores de pedidos por cliente, mas apenas para os clientes que gastaram mais de R$500 no total

Código: Selecionar todos

SELECT c.nome, COUNT(p.id_pedido), SUM(p.valor_total)
FROM clientes c, pedidos p
WHERE c.id_cliente = p.id_cliente
GROUP BY c.nome
HAVING SUM(p.valor_total) > 500;
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Responder