Notas de estudo do MySQL cartão perfurado-4

4.1 combate MySQL

#Learning content #
Importação e exportação de dados Exporte
qualquer tabela MySQL criada anteriormente e está no formato CSV / XLS e, em
seguida, importe a tabela CSV / XLS para o banco de dados

-Exportar tabela (tabela de e-mail, formato xls)
Insira a descrição da imagem aqui
clique com o botão direito do mouse-Exportar assistente-selecione planilha de dados do Excel ( .xls) -defina o caminho de exportação e nome do arquivo-continue para a próxima etapa-sucesso de exportação

-resultado
Insira a descrição da imagem aqui

--Importe a tabela de e-mail (* .xls) exportada na etapa anterior,
clique com o botão direito na tabela no banco de dados de destino e selecione Assistente de importação
Insira a descrição da imagem aqui

Selecione o arquivo Excel (* .xls) - selecione o arquivo a ser importado (email.xls) - verifique o nome da tabela (o nome da tabela pode ser alterado para não duplicar o nome da tabela original, esta tabela usa o nome da tabela por padrão: planilha1)

-resultado
Insira a descrição da imagem aqui

Operação

Projeto 7: O funcionário com o maior salário em cada departamento (dificuldade: médio)
cria uma tabela Funcionário, que contém todas as informações do funcionário, e cada funcionário tem seu ID, salário e ID de departamento correspondentes.
± - ± ------ ± ------- ± ------------- +
| Id | Nome | Salário | DepartmentId |
± - ± ------ ± ------- ± ------------- +
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Máx. | 90000 | 1 |
± - ± ------ ± ------- ± ------------- +
Crie uma tabela Departamento, incluindo todos os departamentos da empresa em formação.
± - ± --------- +
| Id | Nome |
± - ± --------- +
| 1 | IT |
| 2 | Vendas |
± - ± ------ --- +
Escreva uma consulta SQL para encontrar o funcionário mais bem pago em cada departamento. Por exemplo, de acordo com a tabela fornecida acima, Max tem o salário mais alto no departamento de TI e Henry tem o salário mais alto no departamento de Vendas.
± ----------- ± --------- ± ------- +
| Departamento | Funcionário | Salário |
± ----------- ± --------- ± ------- +
| TI | Max | 90000 |
| Vendas | Henry | 80000 |
± ----------- ± --------- ± ------- +

-Criar mesa (Funcionário)

CREATE TABLE Employee
(Id INT NOT NULL PRIMARY KEY,
 name VARCHAR(255) NOT NULL,
 salary INT NOT NULL,
 department INT NOT NULL);

-resultado

-Inserir dados

INSERT INTO Employee VALUES(1, 'Joe', 70000, 1);
INSERT INTO Employee VALUES(2, 'Henry', 80000, 2);
INSERT INTO Employee VALUES(3, 'Sam', 60000, 2);
INSERT INTO Employee VALUES(4, 'Max', 90000, 1);

-resultado
Insira a descrição da imagem aqui

-Criar tabela (Departamento)

CREATE TABLE Department
(Id INT NOT NULL PRIMARY KEY,
 Name VARCHAR(255) NOT NULL);

-resultado
Insira a descrição da imagem aqui

-Inserir dados

INSERT INTO Department VALUES(1, 'IT');
INSERT INTO Department VALUES(2, 'Sales');

-resultado
Insira a descrição da imagem aqui

-Código (escreva uma consulta SQL para encontrar o funcionário com o maior salário em cada departamento. Por exemplo, de acordo com a tabela fornecida acima, Max tem o maior salário no departamento de TI e Henry tem o maior salário no departamento de Vendas)

SELECT E.name, D.Name
FROM Employee AS E
JOIN Department AS D
ON E.department = D.id
GROUP BY D.Name;
HAVING E.salary = max(E.salary)

-resultado
Insira a descrição da imagem aqui

Item 8: Mudança de assento (dificuldade: média)

Xiaomei é professora de tecnologia da informação em uma escola de ensino médio. Ela tem uma mesa de assento, que geralmente é usada para armazenar os nomes dos alunos e seus respectivos ids.
O id na coluna está aumentando continuamente.
Xiaomei deseja mudar os assentos de dois alunos adjacentes.
Você pode ajudá-la a escrever uma consulta SQL para produzir o resultado que Xiaomei deseja?
Crie uma mesa de assento conforme mostrado abaixo:
Exemplo:
± -------- ± -------- +
| id | student |
± -------- ± ------ - +
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Verde |
| 5 | Jeames |
± -------- ± -------- +
Se os dados forem inseridos É a tabela acima, o resultado de saída é o seguinte:
± -------- ± -------- +
| id | student |
± -------- ± ------ - +
| 1 | Doris |
| 2 | Abade |
| 3 | Verde |
| 4 | Emerson |
| 5 | Jeames |
± -------- ± -------- +
Nota:
Se Se o número de alunos for ímpar, não há necessidade de alterar a cadeira do último aluno.

-Crie uma mesa (assento)

CREATE TABLE seat
(id INT NOT NULL PRIMARY KEY,
 student VARCHAR(255) NOT NULL);

-Inserir dados

INSERT INTO seat VALUES (1, 'Abbot');
INSERT INTO seat VALUES (2, 'Doris');
INSERT INTO seat VALUES (3, 'Emerson');
INSERT INTO seat VALUES (4, 'Green');
INSERT INTO seat VALUES (5, 'Jeames');

-resultado
Insira a descrição da imagem aqui

-Código (quero mudar as cadeiras de dois alunos adjacentes, se o número de alunos for ímpar, não é necessário mudar a cadeira do último aluno)

SELECT id, student FROM
(SELECT id - 1 AS id, student FROM seat 
 WHERE MOD(id,2) = 0 
 UNION 
 SELECT id + 1 AS id, student FROM seat
 WHERE MOD(id,2) = 1 AND id <> (SELECT COUNT(*) FROM seat)
 UNION
 SELECT id, student FROM seat
 WHERE MOD(id,2) = 1 AND id = (SELECT COUNT(*) FROM seat)) s 
ORDER BY id;

-resultado
Insira a descrição da imagem aqui

Item 9: Classificação da pontuação (dificuldade: média)

Escreva uma consulta SQL para obter a classificação da pontuação. Se as duas pontuações forem iguais, as duas pontuações (Classificação) serão iguais. Observe que a próxima posição após o empate deve ser o próximo valor inteiro consecutivo. Em outras palavras, não deve haver "lacuna" entre as classificações.
Crie a seguinte tabela de pontuação:
± - ± ------ +
| Id | Pontuação |
± - ± ------ +
| 1 | 3,50 |
| 2 | 3,65 |
| 3 | 4,00 |
| 4 | 3,85 |
| 5 | 4,00
| 6 | 3,65 |
± - ± ------ +
Por exemplo, de acordo com a tabela de pontuação fornecida acima, sua consulta deve retornar (classificada da pontuação mais alta para a mais baixa):
± ----- - ± ----- +
| Pontuação | Classificação |
± ------ ± ----- +
| 4,00 | 1 |
| 4,00 | 1 |
| 3,85 | 2 |
| 3,65 | 3 |
| 3,65 | 3 |
| 3,50 | 4 |
± ------ ± ----- +

-Crie uma mesa (pontuação)

CREATE TABLE score
(Id INT NOT NULL PRIMARY KEY,
 Score DECIMAL(5,2) NOT NULL);

-Inserir dados

INSERT INTO score VALUES (1, 3.50);
INSERT INTO score VALUES (2, 3.65);
INSERT INTO score VALUES (3, 4.00);
INSERT INTO score VALUES (4, 3.85);
INSERT INTO score VALUES (5, 4.00);
INSERT INTO score VALUES (6, 3.65);

-Código (escreva uma consulta SQL para obter a classificação da pontuação. Se duas pontuações são iguais, a classificação das duas pontuações (Classificação) é a mesma)

SELECT s1.Score, COUNT(DISTINCT s2.Score) AS Rank
FROM score AS s1
JOIN score AS s2 
ON s1.Score <= s2.Score
GROUP BY s1.Id
ORDER BY s1.Score DESC;

-resultado
Insira a descrição da imagem aqui

4.2 Projeto do Complexo de Combate Real MySQL

#Operação#

Projeto 10: Itinerário e usuários (dificuldade: difícil)

As informações de viagem de todos os táxis são armazenadas na tabela Viagens. Cada viagem possui um ID de chave exclusivo. Client_Id e Driver_Id são chaves estrangeiras de Users_Id na tabela de usuários. Status é um tipo de enumeração e os membros da enumeração são ('concluído', 'cancelled_by_driver', 'cancelado_by_client').
± - ± ---------- ± ---------- ± -------- ± ---------------- --- ± --------- +
| Id | Client_Id | Driver_Id | City_Id | Status | Solicitação_at |
± - ± ---------- ± --------- - ± -------- ± ------------------- ± --------- +
| 1 | 1 | 10 | 1 | concluído | 01-10-2013 |
| 2 | 2 | 11 | 1 | cancelled_by_driver | 01-10-2013 |
| 3 | 3 | 12 | 6 | concluído | 01-10-2013 |
| 4 | 4 | 13 | 6 | cancelled_by_client | 01-10-2013 |
| 5 | 1 | 10 | 1 | concluído | 02-10-2013 |
| 6 | 2 | 11 | 6 | concluído | 02-10-2013 |
| 7 | 3 | 12 | 6 | concluído | 2013-10-02 |
| 8 | 2 | 12 | 12 | concluído | 2013-10-03 |
| 9 | 3 | 10 | 12 | concluído | 03/10/2013 |
| 10 | 4 | 13 | 12 | cancelled_by_driver | 03-10-2013 |
± - ± ---------- ± - -------- ± -------- ± ------------------- ± -------- +
Armazenamento de tabela de usuários Todos os usuários. Cada usuário possui uma chave exclusiva Users_Id. Banned indica se este usuário está banido, e Role é um tipo enumerado que indica ('cliente', 'motorista', 'parceiro').
± --------- ± ------- ± ------- +
| Users_Id | Banido | Função |
± --------- ± ----- - ± ------- +
| 1 | Não | cliente |
| 2 | Sim | cliente |
| 3 | Não | cliente |
| 4 | Não | cliente |
| 10 | Não | driver |
| 11 | Não | driver |
| 12 | Não | driver |
| 13 | Não | driver |
± --------- ± ------- ± ------- +
Escreva uma instrução SQL para descobrir Taxa de cancelamento para usuários não banidos de 1º de outubro de 2013 a 3 de outubro de 2013. Com base na tabela acima, sua instrução SQL deve retornar o seguinte resultado, com a taxa de cancelamento em duas casas decimais.
± ----------- ± ------------------ +
| Dia | Taxa de cancelamento |
± ----------- ± ------------------ +
| 01-10-2013 | 0,33 |
| 02/10/2013 | 0,00 |
| 03-10-2013 | 0,50 |
± ----------- ± ------------------ +

-Criar tabela (viagens)

CREATE TABLE Trips
(Id INT NOT NULL PRIMARY KEY,
 Client_Id INT NOT NULL,
 Driver_Id INT NOT NULL,
 City_Id INT NOT NULL,
 Status enum('completed', 'cancelled_by_driver', 'cancelled_by_client'),
 Request_at DATE);

-Inserir dados (viagens)

INSERT INTO Trips VALUES (1, 1, 10, 1, 'completed', '2013-10-01');
INSERT INTO Trips VALUES (2, 2, 11, 1, 'cancelled_by_driver', '2013-10-01');
INSERT INTO Trips VALUES (3, 3, 12, 6, 'completed', '2013-10-01');
INSERT INTO Trips VALUES (4, 4, 13, 6, 'cancelled_by_client', '2013-10-01');
INSERT INTO Trips VALUES (5, 1, 10, 1, 'completed', '2013-10-02');
INSERT INTO Trips VALUES (6, 2, 11, 6, 'completed', '2013-10-02');
INSERT INTO Trips VALUES (7, 3, 12, 6, 'completed', '2013-10-02');
INSERT INTO Trips VALUES (8, 2, 12, 12, 'completed', '2013-10-03');
INSERT INTO Trips VALUES (9, 3, 10, 12, 'completed', '2013-10-03');
INSERT INTO Trips VALUES (10, 4, 13, 12, 'cancelled_by_driver', '2013-10-03');

-Criar tabela (usuários)

CREATE TABLE Users
(Users_Id INT NOT NULL PRIMARY KEY,
 Banned enum('Yes', 'No'),
 Role enum('client', 'driver', 'partner'));

-Inserir dados (usuários)

INSERT INTO Users VALUES(1, 'No', 'client');
INSERT INTO Users VALUES(2, 'Yes', 'client');
INSERT INTO Users VALUES(3, 'No', 'client');
INSERT INTO Users VALUES(4, 'No', 'client');
INSERT INTO Users VALUES(10, 'No', 'driver');
INSERT INTO Users VALUES(11, 'No', 'driver');
INSERT INTO Users VALUES(12, 'No', 'driver');
INSERT INTO Users VALUES(13, 'No', 'driver');

-Código (verifique a taxa de cancelamento de usuários não banidos de 1 de outubro de 2013 a 3 de outubro de 2013, a taxa de cancelamento (Taxa de cancelamento) deve ter duas casas decimais)

SELECT a.request_at AS Day,
ROUND(
SUM(CASE WHEN a.status = 'completed' THEN 0 ELSE 1 END)/COUNT(*),2) 
AS 'Cancellation Rate'
FROM trips a
JOIN users b
ON a.Client_Id = b.Users_Id AND b.Banned = 'No'
WHERE a.Request_at BETWEEN '2013-10-01'AND '2013-10-03'
GROUP BY a.Request_at;

-Results
Insira a descrição da imagem aqui
http://www.mamicode.com/info-detail-2651451.html

Projeto 11: Os 3 melhores funcionários bem pagos em cada departamento (dificuldade: média)

Limpe a tabela de funcionários no item 7 e insira novamente os seguintes dados (na verdade, insira 5 e 6 mais linhas):
± - ± ------ ± ------- ± ------- ------ +
| Id | Nome | Salário | DepartmentId |
± - ± ------ ± ------- ± ------------- +
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Máx. | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
± - ± ------ ± ------- ± ------------- +
Escreva uma consulta SQL para encontrar os três principais funcionários em cada departamento . Por exemplo, de acordo com a tabela fornecida acima, o resultado da consulta deve retornar:
± ----------- ± --------- ± ------- +
| Departamento | Funcionário | Salário |
± ----------- ± --------- ± ------- +
| TI | Máx. | 90000 |
| TI | Randy | 85000 |
| TI | Joe | 70000 |
| Vendas | Henry | 80000 |
| Vendas | Sam | 60000 |
± ----------- ± --------- ± ------- +

Além disso, considere a implementação da função dos N principais funcionários com salários altos em cada departamento.

-Criar mesa (Funcionário)

CREATE TABLE Employee
(Id INT NOT NULL PRIMARY KEY,
 Name VARCHAR(255) NOT NULL,
 Salary INT NOT NULL,
 Departmentld INT NOT NULL);

-Inserir dados (funcionário)

INSERT INTO Employee VALUES(1, 'Joe', 70000, 1);
INSERT INTO Employee VALUES(2, 'Henry', 80000, 2);
INSERT INTO Employee VALUES(3, 'Sam', 60000, 2);
INSERT INTO Employee VALUES(4, 'Max', 90000, 1);
INSERT INTO Employee VALUES(5, 'Janet', 69000, 1);
INSERT INTO Employee VALUES(6, 'Randy', 85000, 1);

-Criar tabela (Departamento)

CREATE TABLE Department
(Id INT NOT NULL PRIMARY KEY,
 Name VARCHAR(255) NOT NULL);

-Inserir dados (Departamento)

INSERT INTO Department VALUES(1, 'IT');
INSERT INTO Department VALUES(2, 'Sales');

-Código (escrever uma consulta SQL para encontrar os três principais funcionários em cada departamento)

SELECT d.Name AS Department, e1.Name AS Employee, e1.Salary
FROM Employee AS e1
JOIN Employee AS e2
ON e1.Departmentld = e2.Departmentld 
AND E2.Salary >= E1.Salary 
JOIN Department AS d
ON e1.Departmentld = d.Id
GROUP BY e1.Name
HAVING COUNT(DISTINCT e2.Salary) <=3
ORDER BY d.name, e1.Salary DESC;

-resultado
Insira a descrição da imagem aqui

Classificação da pontuação do Projeto Doze - (dificuldade: média)

Ainda é a tabela de pontuação de ontem, que implementa a função de classificação, mas a classificação não é contínua, da seguinte forma:
± ------ ± ----- +
| Pontuação | Classificação |
± ------ ± ---- - +
| 4,00 | 1 |
| 4,00 | 1 |
| 3,85 | 3 |
| 3,65 | 4 |
| 3,65 | 4 |
| 3,50 | 6 |
± ------ ± -----

-Código

SELECT Score,
(SELECT COUNT(*) FROM score AS s2 
WHERE s2.Score > s1.Score)+1 AS 'Rank'
FROM score AS s1
ORDER BY Score DESC;

Acho que você gosta

Origin blog.csdn.net/Baby1601tree/article/details/89058929
Recomendado
Clasificación