Faça uma consulta que mostre o valor medio de vendas do ano de 2017 ? Por mim não tem sentido esta pergunta ?

43 respostas
postgresql
F

43 Respostas

rodevops

Pesquise sobre a função AVG que vai te fazer sentido…

F

Eu sei usar ela amigo , mas olha ai , ele quer o ano de 2017 , não tem o atributo ano , e o valor medio de vendas? eu fiz assim : select avg(valortotal) As valorMedio from venda ; será que é isso mesmo ?

Nadall

Boa tarde…

Depende muito de como você deixou para o campo dataVenda
Tente o comando abaixo, qualquer coisa só de uma perfumada de acordo com sua tabela…

SELECT AVG(valorTotal) FROM Venda Where dataVenda Like %2017;

F

Mas o 2017 não aparece amigo ?

Nadall

Mas o 2017 será preenchido ainda em sua tabela certo?
Até porque vai precisar das informações para calcular o valor

F

estou pensando em algo aqui , espera , eu tenho dataVenda, eu me esqueci disso , obrigado ai , acho que agora sei o que tenho que fazer ,obrigado ai .

Nadall

Tranquilo,
Qualquer dúvida volte a perguntar…
Só acrescentando, após o WHERE, você também pode optar pelo BETWEEN

F

pensei nisso também , grato ai , eu lerdei aqui , mas acho que é o stress , o pgadmin4 me fez raiva de mais hoje , tive que trocar para o pgadmin3 , internet fazendo raiva , roteador desconfigurado ainda.

Nadall

Sem problemas rsrs
Acaba tirando qualquer um do sério…
Boa sorte
Abraços

F

fiz assim cara e funfou

SELECT AVG(valorTotal) FROM Venda Where dataVenda between '03/01/2017’and ‘03/05/2017’ ;

Nadall

Sim…
Com o between dá certo.
Mas ele somente irá levar valor entre essas datas que você estabeleceu('03/01/2017’ e ‘03/05/2017’)

F

Isto mesmo que ele queria , obrigado ai .

rodevops

Você não disse o que sabia ou não, fica dificil adivinharmos não é mesmo?

E outra, sempre use as funções nativas do banco…

https://www.postgresql.org/docs/8.1/static/functions-datetime.html

E considere muito o que o @Nadall disse sobre o between…

No seu caso, melhor considerar apenas pelo ano…

SELECT AVG(valorTotal) FROM Venda 
WHERE EXTRACT(YEAR FROM DATE dataVenda) = 2017;

E assim você vai brincando, conhecendo mais o banco e sua sintaxe SQL, boa sorte!

F

oi obrigado pela atenção , estou aprendendo ainda, me desculpe ai , se não fui preciso no que era para ser feito …

F

Oi me ajude em outra aqui se puder , eu fiz, mas tá meio estranho,

Nadall

Sim, pode perguntar…

F

sobre a tabela union , no postgres fica uma salada , é isso mesmo ?

rodevops

Quanto ao union, vou deixar vocês resolverem, mas a consulta mais acima sobre o cliente mais velho, aproveite que está estudando e já vai corrigindo sua lógica… evite usar subquery, elas pecam em performance, use sempre os recursos que o sql te dá, por exemplo…

select nome, MAX(salario), MAX(idade) from cliente;

Isso já mata sua questão e evita uma query dentro de outra… aproveite e extenda seus estudos pesquisando sobre funções de agrupamento e para que elas servem…

Nadall

Primeiro, está certo o UNION ALL para duas tabelas diferentes?
No caso você está buscando da venda e da cliente…

Segundo, pelo que eu conheço(bem pouco de union)
A sintaxe do “union” é para realizar um distinct e elimina as linhas duplicadas.
E a “union all” que você usou, não faz o distinct, ele traz tudo…

Então na sua query, ele não está comparando as linhas, pois são tabelas e colunas diferentes, então está trazendo tudo assim misturado

F

oi , union ele une tabelas com atributos que tem mesmo tipo , aqui tem um exemplo parecido
SELECT id, mensagem FROM mensagem
UNION
SELECT código, localidade FROM postal

Nadall

Sim, sua query os atributos são do mesmo tipo.
Tanto que ele trouxe…
Conforme você colocou no código
idvenda e valortotal
e logo abaixo
idCliente e salario

Bom, estou dizendo que levou pela query e sem ver sua tabela original com as informações.

Nadall

O que eu quis dizer sobre a comparação e sobre ser tabelas diferentes…
Vou tentar dar um exemplo…
Usando a tabela venda.

Select idvenda, valorTotal from venda where dataVenda = 20/01/2017
union
Select idvenda, valorTotal from venda where dataVenda = 20/03/2017

Ele faria um distinct e iria trazer de acordo com o que estava no where, sem duplicadas.
E com o union all, iria trazer tudo, mesmo com duplicadas…

Em questão de union sou um pouco leigo, mas o jeito que você fez irá dar certo, mas irá trazer tudo embolado assim

F

entendi valeu , eu vi um video do boson treinamentos aqui no you tube, fica assim mesmo , uma salada, mas mesmo assim grato ai .

Nadall

Espero não ter te confundido… kkk
Precisando, estou à disposição!

F

amigo , eu agora estacionei no minus, se sabe esta ? tenho prova hoje , se não pesquisaria com calma, o foda que a prova vai ser escrita.kkkk

Nadall

Qual seria a dúvida?
Ele pega as linhas distintas de uma consulta e retorna as linhas que não aparecem em um segundo conjunto de resultados…

F

estou tentando pegar a idade , e não consigo neste :select *from cliente where idade<=45
minus select *from cliente where between 23 and 25;

Nadall

Não faltou a condição idade no segundo conjunto?
O minus vai pegar os resultados do primeiro conjunto, que não tenha no segundo…

Nesse seu comando, ele vai pegar todos com <=45, cujo, não esteja entre 23 e 25…

F

Isto ai , eu entendi , só não sei por que não tá indo .

Nadall

Me envie um print da sua tabela cliente preenchida por favor.

F

Nadall

Voce corrigiu ela para :
select *from cliente where idade<=45
minus select *from cliente where idade between 23 and 25;

Se sim, me envie a mensagem que lhe apresenta ao tentar rodar

F

continua com erro .affs

Nadall

Qual a mensagem de erro?

F

F

Conseguiu achar o erro ?

Nadall

Eu uso o MySql, e não tem MINUS
Me desculpe pela demora…
Realize um teste por favor.
Tente fazer comparação entre duas tabelas diferentes para verificar se apresenta algum erro…

F

vou tentar entao

F

Espera , não faz sentido , por que o minus ele vai tirar os valores que estão na mesma tabela .

O operador MINUS devolve os registros que resultam do primeiro
SELECT e não aparecem no segundo

F

Espera , acho que já sei o que é, no postgres não existe este comando , então eu acho que é outro .

F

Agora foi , eu lembrei agora , é assim :smile:

Não se usa o Minus no postgres, não iria dar certo nunca.kkkkkkkkkkkkkk
select idade from cliente where idade<=45
except select idade from cliente where idade between 23 and 35;

F

cara, eu resolvi , se tá ai ?

Nadall

Bom dia,

Precisei entrar em um plantão na empresa.
Me desculpe pela ausência…
Então, no MySQL não utiliza… eu utilizo o NOT IN
No postgree também não então rsrs
Que bom que descobriu

Criado 21 de maio de 2018
Ultima resposta 22 de mai. de 2018
Respostas 43
Participantes 3