Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador DBMS. Mostrar todas as postagens
Mostrando postagens com marcador DBMS. Mostrar todas as postagens

quinta-feira, 21 de outubro de 2021

URI (BEECROWD) - 2994 - Quanto Ganha um Médico? - SQL - PostgreSQL

Fala, pessoal! Tudo bem?

Hoje vou postar a solução do exercício 2994. Eu acabei de resolvê-lo.

Antes de resolver qualquer problema de SQL do URI (BEECROWD agora), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)
Problema2994

Enunciado:

Você trabalha no setor de TI de um Hospital e precisa calcular a receita de pagamento de cada um dos médicos. Cada médico ganha 150$ por hora mais uma porcentagem dependendo do turno de trabalho, por exemplo, o médico Wellington trabalhou 1 hora no turno do dia, e 2 horas no turno da noite, logo seu salário semanal será: ( ( 1 * 150 ) + 1% ) + ( ( 2 * 150 ) + 15% ) = 496.5. Além disso, você pode usar a função round(value,1) para exibir os salários com 1 casa decimal e ordene o resultado do maior para o menor salário.

Solução:

Esse exercício eu não achei dos mais fáceis. É preciso usar o operador de agregação SUM e obter as horas trabalhadas multiplicadas por 150, mais o bônus da respectiva hora da tabela work_shifts. Ou seja, quem trabalhou 10 horas de dia a uma taxa de 10%, recebe 10 x 150 + 150 x 0,1. Se esta mesma pessoa trabalhou 5 horas de noite a uma taxa de 20%, recebe 5 x 150 + 150 x 0,2. E tudo isso precisa ser somado (as horas trabalhadas em todos os turnos).

A fórmula que utilizei no SQL pode parecer um pouco complicada e diferente do que expliquei acima, mas vamos lá, por partes:

  • attendances.hours * 150 representa o quanto ele ganha por hora.
  • (attendances.hours * 15)*work_shifts.bonus)*.1 representa o bônus
No caso do bônus eu apenas simplifiquei, já que a hora vale 150 e precisaríamos dividir tudo por 100  (ou multiplicar por 0,01). Cortei dois zeros dessa operação e fiquei com a hora valendo 15 e a multiplicação de 0,01 passou a ser de 0,1. Eu utilizei .1 e não 0.1 apenas para simplificar e me poupar de escrever um dígito, mas é a mesma coisa.

As demais cláusulas apenas garantem as referências corretas e a ordenação solicitada, bem como a nomeação da coluna para salary, utilizada na ordenação do resultado de forma descendente (DESC).

Acredito que dava pra fazer um pouco diferente. Como você fez?

O código que submeti na plataforma ficou assim:

SELECT
	doctors.name,
	ROUND(SUM((attendances.hours * 150)+((attendances.hours * 15)*work_shifts.bonus)*.1), 1) AS salary
FROM doctors, attendances, work_shifts
WHERE
	doctors.id=attendances.id_doctor
    AND work_shifts.id=attendances.id_work_shift
GROUP BY doctors.name
ORDER BY salary DESC;

Ignore a cor azul da palavra "name", pois ela não é uma palavra reservada aqui, mas uma coluna da tabela doctors. Bom, não esqueça também de quebrar o código em várias linhas se ele ficar muito grande! Esse código mesmo, a linha três eu não quebrei só para não afetar a fórmula, mas acho que ficou grande de qualquer maneira!

Por hoje é isso!

sexta-feira, 6 de novembro de 2020

URI (BEECROWD) - 2604 - Menores que 10 ou Maiores que 100 - SQL - PostgreSQL

Mais um exercício de SQL! Como você fez esse?

Antes de resolver qualquer problema de SQL do URI (agora BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2604

Solução:

Esse exercício eu achei bem fácil!

A gente sabe que a solução sempre passa pelo uso do select com cláusulas adequadas. Nesse caso, era necessário selecionar as colunas id e name da tabela products. Mas fazendo isso receberíamos todos os registros com os resultados dessas duas colunas. A restrição aqui vinha usando a cláusula where, que funciona semelhante a um condicional em linguagens de programação imperativas.

A condição da cláusula where poderia ser feita de várias formas, por exemplo, usando operadores relacionais (maior ou igual, menor ou igual etc). Eu optei por resolver usando o BETWEEN (entre), que é usado na forma: BETWEEN X and Y. Ou seja, valor entre X e Y. No caso desse exercício, era justamente esse intervalo que NÃO deveria ser retornado. Então neguei o resultado colocando NOT antes do BETWEEN, assim pego os valores que não estão entre 10 e 100. Fácil, não é mesmo?

O código que submeti na plataforma ficou assim:

select id, name from products where price NOT BETWEEN 10 and 100;

Lembrando que, por questões de organização e legibilidade, é possível quebrar a linha em mais linhas, se o programador assim quiser fazer. Eu aconselho a quebrar quando a legibilidade fica comprometida.

Por hoje é isso!

quinta-feira, 5 de novembro de 2020

URI (BEECROWD) - 2603 - Endereço dos Clientes- SQL - PostgreSQL

Fala pessoal, tudo bem? Os exercícios de SQL são um pouco diferentes, dá pra resolver até mesmo criando os esquemas online e fazendo os testes para confirmar. No caso desse exercício aqui, um select bem simples usando a diretiva LIKE já resolvia! Mesmo assim, dava pra fazer de outras formas. Como você fez?

Antes de resolver qualquer problema de SQL do URI (BEECROWD agora), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2603

Solução:

Como ocorre em todos exercícios da plataforma, precisamos fazer uma operação de seleção (SELECT) com cláusulas adequadas para receber somente os registros de que precisamos. Neste exercício, precisamos dos campos das colunas name e street da tabela customers, mas com uma restrição: o valor do campo city precisa ser "Porto Alegre". Há mais de uma forma para resolver, e nesta solução optei por usar o operador LIKE.

Para quem não sabe, o operador LIKE é utilizado em conjunto com a cláusula WHERE. Ele pesquisa a existência de algum padrão. Nesse caso, o padrão é ser exatamente como a string "Porto Alegre".

select name, street from customers
where city LIKE 'Porto Alegre';

Lembrando que, por questões de organização e legibilidade, é possível quebrar a linha em mais linhas, se o programador assim quiser fazer. Eu aconselho a quebrar quando a legibilidade fica comprometida. Nesse caso, usei duas linhas por achar que ficaria mais fácil de ler, mas você pode deixar esta consulta toda em uma linha.

Até a próxima!

quarta-feira, 4 de novembro de 2020

URI (BEECROWD) - 2602 - Select Básico - SQL - PostgreSQL

Mais um exercício de SQL! Nesse exercício aqui, um select bem simples usando a diretiva LIKE já resolvia, mas preferi usar a igualdade só pra variar um pouco a solução! Como ficou a sua?

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!
Plataforma: URI (BEECROWD)

Problema2602

Solução:

Mais um dos exercícios mais básicos de SQL disponíveis na plataforma! Esse exercício é bom para quem está começando a aprender SQL.

Para deixar diferente de outras soluções, optei por não usar o operador LIKE aqui. A solução passa por selecionar (SELECT) os valores do campo name (portanto, SELECT name) da tabela customers somente onde o estado (coluna "state") for "RS". Dessa vez, usei o operador relacional de igualdade, representado pelo sinal de igual ("=").

SELECT name FROM customers WHERE state = 'RS';

Esse era só isso. Muito simples, né?!

Ah, outro ponto importante: as palavras reservadas não são case sensitive aqui. Isso significa que você pode escrever SELECT ou select que a plataforma reconhecerá o comando.

Por hoje era isso, espero que esse post ajude!

terça-feira, 3 de novembro de 2020

URI (BEECROWD) - 2605 - Representantes Executivos - SQL - PostgreSQL

Seguimos com as soluções para os exercícios de SQL!

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2605

Solução:

Resolvi quebrar essa solução em quatro linhas só por uma questão de legibilidade. Como já comentei em outras postagens, quem preferir pode fazer tudo na mesma linha.

Esse exercício exigia o uso de duas tabelas, products e providers. Era necessário obter os nomes de todos os produtos e fornecedores com código da categoria igual a 6. OK, isso parece fácil, basta criarmos uma condição na cláusula WHERE para que a categoria seja igual a 6. No entanto, é necessário realizar a referência correta entre o produto e o provedor, ou seja, não podemos relacionar o produto a qualquer provedor, mas sim ao provedor dele. Isso é feito acrescentando mais uma condição na cláusula WHERE, sendo necessário usar o operador lógico AND. Dessa forma, duas condições precisam ser satisfeitas:

  • A categoria do produto precisa ser a 6;
  • O id do provedor do produto (tabela products) precisa bater com um id de provedor (tabela providers).
Para quem estiver começando no aprendizado de SQL e encontrar dificuldades no entendimento deste exercício, sugiro revisar a parte de Modelo Entidade-Relacionamento, pois é na etapa de projeto que começamos a ver as cardinalidades. Depois disso, uma sugestão é estudar o Modelo Relacional, pois ele trabalha conceitos importantes como chave e aspectos de integridade. Nesse exercício em específico é fundamental compreender os conceitos de chave primária e chave estrangeira.

Observação: um passo adicional que eu sugiro e que ajuda muito a entender as consultas em SQL é estudar álgebra relacional.

SELECT products.name, providers.name
FROM products, providers
WHERE products.id_categories = 6
AND products.id_providers = providers.id;
 
Solução compreendida? Espero que sim! Até a próxima!

segunda-feira, 2 de novembro de 2020

URI (BEECROWD) - 2606 - Categorias - SQL - PostgreSQL

Nova solução de exercício de SQL sendo postada!

Antes de resolver qualquer problema de SQL do BEECROWD (antigo URI), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2606

Solução:

Assim como já fiz em outras soluções, quebrei a resposta em quatro linhas só por questão de legibilidade. Quem quiser pode submeter tudo numa mesma linha.

Neste caso, era necessário selecionar (SELECT) o id e o nome dos produtos. Mesmo que ambos sejam só de uma tabela (products), era necessário usar também a tabela categories, pois a condição dizia que a categoria devia iniciar com "super". Além disso, seria necessário que a categoria do produto fosse a mesma. Sabendo disso, basta ver a solução!

Novamente, para quem tem dificuldades nessa parte, sugiro revisar os estudos sobre Modelo Entidade-Relacionamento, Modelo Relacional e chaves, principalmente o uso de chaves estrangeiras.

SELECT products.id, products.name
FROM products, categories
WHERE products.id_categories = categories.id
AND categories.name LIKE 'super%';

domingo, 1 de novembro de 2020

URI (BEECROWD) - 2607 - Cidades em Ordem Alfabética - SQL - PostgreSQL

Nova solução de exercício de SQL!

Antes de resolver qualquer problema de SQL do BEECROWD/URI, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2607

Solução:

Neste exercício, era necessário selecionar as cidades (valores do campo city) da tabela providers, em ordem alfabética. Um ponto importante aqui é que poderia acontecer de existirem mais providers de uma mesma cidade, caso em que o nome da cidade apareceria repetido. Neste caso, faz-se necessário selecionar somente as cidades distintas com o uso da cláusula distinct. A ordem alfabética pode ser feita com a cláusula order by. Neste caso, o ordenamento pode se dar de forma ascendente (ASC) ou descendente (DESC). O valor ASC é opcional e pode ser omitido.

SELECT DISTINCT city FROM providers ORDER BY city ASC;

sábado, 31 de outubro de 2020

URI (BEECROWD) - 2608 - Maior e Menor Preço - SQL - PostgreSQL

Nova solução de SQL!

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2608

Solução:

Esse exercício era bem simples! O importante era conhecer operadores de agregação aqui. Neste caso, max e min. Os operadores de agregação max e min pegam o valor máximo e mínimo de uma coluna, respectivamente. Então, neste exercício era necessário selecionar (SELECT) o preço (coluna price) máximo e mínimo de produtos, da tabela products. 

Note o uso do "as" aqui. Ele serviu para nomear a coluna no resultado. Assim o nome da coluna que aparecerá na consulta será price, e não max(price) ou min(price).

Fácil? :-)

select max(price) as price, min(price) as price from products;

sexta-feira, 30 de outubro de 2020

URI (BEECROWD) - 2609 - Produtos por Categorias - SQL - PostgreSQL

Seguimos com outra solução de exercício de SQL!

Antes de resolver qualquer problema de SQL do URI (agora BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2609

Solução:

Na minha opinião, este exercício tem complexidade média. Ele combina operador de agregação (SUM), condição (WHERE) e agrupamento (GROUP BY). 

Neste exercício era necessário selecionar o nome da categoria e a quantidade de produtos, agrupados por categoria. Para isso, era necessário exibir o nome (coluna name da tabela categories) e a soma de produtos, pegando a quantidade de cada um deles (coluna amount da tabela products). A restrição é que o id da categoria precisaria bater (lembre-se de chave estrangeira!) e o agrupamento de categorias é feito pelo nome, utilizando a cláusula GROUP BY. Você resolvei de forma diferente?

SELECT categories.name, sum(products.amount)
from categories, products
where products.id_categories = categories.id
GROUP by categories.name;

quinta-feira, 29 de outubro de 2020

URI (BEECROWD) - 2610 - Valor Médio dos Produtos - SQL - PostgreSQL

Outra solução de exercício de SQL!

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2610

Solução:

Mais um bom exercício de nível iniciante em SQL! O importante era saber como fazer para arredondar usando round. Precisamos imprimir a média de preços. Para tratar de preço, usamos sempre duas casas decimais, por isso a função round. A média de preços é obtida com average (AVG). Ela é uma funçãod e agregação assim como sum, min, max.

Mais uma vez usei "as price" para que o nome da coluna apareça "price". Sabendo isso era fácil, não é mesmo?

select round(avg(price),2) as price
from products;

quarta-feira, 28 de outubro de 2020

URI (BEECROWD) - 2611 - Filmes de Ação - SQL - PostgreSQL

Seguimos com outra solução de exercício de SQL!

Antes de resolver qualquer problema de SQL do URI (agora BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2611

Solução:

Mais uma vez a solução aparece com quebras de linha só pra facilitar a leitura. A resposta desse exercício é bem simples: seleciona-se (SELECT) o identificador e o nome dos filmes (colunas id e name) da tabela movies, mas é necessário usar também a tabela de gêneros (genres) para não relacionar todo filme com todo gênero e duplicar resultados. Portanto, na cláusula WHERE basta comparar id_genres (da tabela movies) e id (da tabela genres). Se forem iguais, a condição está satisfeita.

Mas peraí, só isso não resolve o exercício! Isso foi feito apenas para fazer a restrição correta e evitar as relações desnecessárias. É necessário ainda verificar se a descrição do gênero é "Action" (ou seja, se o filme é de ação). Nessa solução usei o operador LIKE, que testa se a coluna em questão corresponde a um padrão. Neste caso o padrão é ser exatamente igual a "Action". O exercício poderia ter sido resolvido de outras formas também. E aí? Como você resolveu? Este é o meu código:

SELECT movies.id, movies.name
FROM movies, genres
WHERE movies.id_genres = genres.id
AND genres.description LIKE 'Action';

terça-feira, 27 de outubro de 2020

URI (BEECROWD) - 2613 - Filmes em Promoção - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI (BEECROWD agora), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2613

Solução:

Outro problema que achei fácil! Novamente, quebrei a linha só pra facilitar a visualização. O objetivo do exercício é selecionar ID e nome de filmes com preço menor que 2.00. Sabemos que o exercício pede para selecionar, então faremos um SELECT. ID e nome devem ser fornecidos informando a tabela, pois é necessário filtrar id_prices e id (da tabela prices) para que sejam iguais, evitando relações incorretas na resposta. Fazendo isso, basta inserir também uma segunda condição utilizando o operador lógico AND: o valor (coluna value) da tabela prices precisa ser inferior a 2.00. 

Nesse exercício era só isso! E aí, achou fácil também?

SELECT movies.id, movies.name
FROM movies, prices
WHERE movies.id_prices = prices.id
AND prices.value < 2.00;

segunda-feira, 26 de outubro de 2020

URI (BEECROWD) - 2614 - Locações de Setembro - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI (novo BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2614

Solução:

Mais um exercício que tem mais de uma solução possível! Como você resolveu?

Esse eu fiz um SELECT pegando as colunas name e rentals_date, verificando a restrição com ids iguais (customers.id e rentals.id_customers) e utilizei duas vezes o operador lógico AND para verificar as datas, pois era necessário imprimir somente os resultados daquele intervalo específico.

Tente resolver utilizando BETWEEN também!

Mais uma vez a consulta foi quebrada. Utilizei cinco linhas, mas poderia ter feito tudo em uma. Nesse caso aqui a linha ficaria muito grande, o que compromete a legibilidade na minha opinião. Veja a instrução que usei para obter o accept, abaixo!

SELECT customers.name, 
rentals.rentals_date FROM customers, rentals
WHERE customers.id = rentals.id_customers AND
rentals.rentals_date >= '2016-09-01'
AND rentals.rentals_date <= '2016-09-30';

domingo, 25 de outubro de 2020

URI (BEECROWD) - 2615 - Expandindo o Negocio - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do antigo URI (agora BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2615

Solução:

Esse era um dos exercícios mais básicos no momento em que resolvi! Um exercício bem simples (dá pra notar pelo tamanho da resposta) para quem está iniciando no SQL. Era necessário selecionar as cidades (coluna city) dos clientes (tabela customers). O que precisava ser feito além de um select básico desta coluna era usar DISTINCT antes do nome da coluna, pegando somente os resultados de campos distintos, ou seja, sem repetir valores do campo city. Assim, mesmo se dois clientes forem da mesma cidade, o nome das cidades não se repete. Fácil? Difícil? O que acharam?

SELECT DISTINCT city FROM customers;

sábado, 24 de outubro de 2020

URI (BEECROWD) - 2616 - Nenhuma Locação - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI (BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2616

Solução:

Aqui um exercício um pouco diferente, pois já envolve subconsultas, também conhecidas como subqueries. Neste caso aqui há uma subconsulta que retorna o id dos clientes na tabela locations. Esses valores são justamente os que nós não precisamos, então a condição para apresentar id e nome dos clientes é que não esteja no retorno dessa subquery. Portanto, usei NOT IN, assim verificando se o valor do id do cliente não bate com o valor de alguma locação, ou seja, retornando só os clientes que não fizeram locação.

SELECT customers.id, customers.name FROM 
customers WHERE customers.id
NOT IN (SELECT locations.id_customers FROM locations);

sexta-feira, 23 de outubro de 2020

URI (BEECROWD) - 2617 - Fornecedor Ajax SA - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI (agora BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2617

Solução:

Nesta solução, foi necessário selecionar o nome da tabela provider e o nome da tabela products, comparando o id dos providers (precisava ser igual) e cujo nome fosse Ajax SA. Novamente, a comparação de texto pode ser feita de mais de uma forma. Dessa vez optei pelo operador relacional de igualdade. E você, como resolveu?

Novamente, por questões de legibilidade, o código foi quebrado em quatro linhas, mas poderia ser feito em uma. Analise sempre a legibilidade. Ficou ruim? Quebre em quantas linhas for necessário.

SELECT products.name, providers.name
FROM products, providers WHERE
products.id_providers = providers.id
AND providers.name = 'Ajax SA';

quinta-feira, 22 de outubro de 2020

URI (BEECROWD) - 2618 - Produtos Importados - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2618

Solução:

Conforme vamos avançando nas soluções, podemos perceber que elas ficam maiores. Nessa eu precisei quebrar o SELECT em seis linhas, senão ficaria bem ruim de ler.

Neste exercício o importante era conseguir cobrir todas as condições, o que foi feito acumulando operadores lógicos AND. Para comparar com textos utilizei o filtro de comparação de padrões LIKE, mas poderia ter feito de outras formas, por exemplo, usando o operador de igualdade. As demais comparações eram necessárias para aplicar todas as restrições, garantindo que os ids são os mesmos nas tabelas em questão. Em caso de dúvidas sobre as condições de igualdade dos ids, sugiro leituras sobre chaves estrangeiras.

SELECT products.name, providers.name, categories.name
FROM products, providers, categories
WHERE products.id_providers = providers.id 
AND products.id_categories = categories.id 
AND providers.name LIKE 'Sansul SA'
AND categories.name LIKE 'Imported';

quarta-feira, 21 de outubro de 2020

URI (BEECROWD) - 2619 - Super Luxo - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2619

Neste exercício, de acordo com a especificação do problema, era necessário mostrar o nome dos produtos, o nome dos fornecedores e o preço dos produtos quando o preço fosse maior que 1000 e a categoria fosse "Super Luxury".

Não é muito diferente dos outros exercícios que já fizemos, a diferença é que, à medida que avançamos, as consultas vão ficando maiores. No entanto, esta solução não usa novidades, podemos resolvê-la com os mesmos operadores já utilizados em soluções anteriores.

Como as colunas de saída já foram informadas (nome dos fornecedores, nome e preço dos produtos), bastava selecionar estas colunas das respectivas tabelas. As restrições de igualdade de chaves precisaria ser testada (products.id_providers = providers.id e products.id_categories = categories.id era suficiente) e, além disso, verificar se o nome da categoria coincide com o padrão "Super Luxury" (aqui usei LIKE, mas poderia ser feito de outra forma) e preço superior a 1000. Pronto, era só fazer isso e já era possível obter o aceite.

E aí, achou fácil?

SELECT products.name, providers.name, products.price
FROM products, providers, categories
WHERE products.id_providers = providers.id
AND products.id_categories = categories.id
AND categories.name LIKE 'Super Luxury' 
AND price > 1000;

terça-feira, 20 de outubro de 2020

URI (BEECROWD) - 2622 - Pessoas Jurídicas - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI (ou BEECROWD agora), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2622

Solução:

Esse exercício é bom para iniciantes em SQL. Pelo tamanho da resposta já dá pra perceber isso!

Para solucionar o exercício 2622, bastava comparar o id do cliente, da tabela customers, com o id_customers, na tabela legal_person. Ou seja, se um ID aparece tanto na tabela customers quanto na tabela legal_person, significa que trata-se de uma pessoa jurídica.

Eu quebrei minha resposta em duas linhas só pra deixá-la mais legível, mas você pode submeter enviando tudo na mesma linha. Veja abaixo como ficou!

SELECT customers.name FROM customers, legal_person
WHERE  customers.id = legal_person.id_customers;

segunda-feira, 19 de outubro de 2020

URI (BEECROWD) - 2620 - Pedidos no Primeiro Semestre - SQL - PostgreSQL

Mais um exercício de SQL que divulgo a solução!

Antes de resolver qualquer problema de SQL do URI/BEECROWD, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2620

Solução:

Mais um exercício bem simples de SQL! Nesse era necessário obter o nome do cliente e o id de sua encomenda/seu pedido em um intervalo de tempo específico. Só precisaria, além de testar o intervalo de tempo, verificar também se o id do cliente era igual ao id_customers na tabela de pedidos, evitando relações desnecessárias e não solicitadas no exercício. Outra forma de resolver era usando between nas datas, mas dessa vez usei os operadores relacionais.

Lembre-se de que se a sua solução ocupa uma linha ela também pode estar correta, aqui quebrei ela em várias linhas por achar que assim fica mais legível.

Como ficou a sua solução? Igual ou diferente?

SELECT customers.name, orders.id FROM customers, orders
WHERE 
orders.orders_date >= '2016-01-01' AND 
orders.orders_date <= '2016-06-30' AND 
customers.id = orders.id_customers;

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas