1
resposta

Resolução Exercício - Quantas caixas cada cliente receberá?

SELECT
    p.id_pedido
,	p.QuantidadeVendida AS quantidade_vendida
,	CEILING(p.QuantidadeVendida / 8) AS quantidade_caixas
FROM tabelapedidos AS p
;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Carlos. Como vai?

Parabéns por mais uma resolução concluída com sucesso! O uso da função CEILING foi a escolha perfeita para esse cenário logístico.

Em situações reais de negócio, como o cálculo de embalagens ou caixas para transporte, não podemos trabalhar com números fracionados para baixo, pois isso deixaria produtos de fora. A função CEILING resolve isso de forma elegante ao sempre arredondar para o número inteiro superior mais próximo.

Para complementar sua análise e agregar valor ao seu estudo sobre funções de arredondamento no SQL, vale a pena comparar o CEILING com outras duas funções numéricas muito comuns:

  • FLOOR: Ao contrário do CEILING, o FLOOR arredonda sempre para baixo, para o maior inteiro que seja menor ou igual ao número atual. Se você tivesse 5 itens e dividisse por 8, o FLOOR resultaria em 0 caixas.
  • ROUND: Essa função arredonda para o número inteiro mais próximo com base na parte decimal. Se o valor for menor que 0.5, arredonda para baixo; se for 0.5 ou maior, arredonda para cima.

Um ponto interessante de notar na sua imagem é que, no pedido P001, você tem 5 itens vendidos. Ao dividir por 8, o resultado é 0.625. Como uma caixa incompleta ainda ocupa uma unidade de envio, o CEILING transformou corretamente esse valor em 1 caixa.

Como boa prática, quando trabalhamos com divisões em alguns bancos de dados (como o SQL Server), pode ser necessário garantir que a divisão não seja estritamente entre inteiros para evitar que o banco descarte as casas decimais antes do arredondamento. Uma forma segura de escrever seria:

SELECT
    p.id_pedido,
    p.QuantidadeVendida AS quantidade_vendida,
    CEILING(p.QuantidadeVendida / 8.0) AS quantidade_caixas
FROM tabelapedidos AS p;

Adicionar o .0 força o SQL a tratar o divisor como um número decimal (float/numeric), garantindo a precisão do cálculo antes do arredondamento pelo CEILING.

Espero que possa ter lhe ajudado!