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

R

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 ?

N

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 ?

N

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 .

N

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.

N

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’ ;

N

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 .

R

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,

N

Sim, pode perguntar…

F

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

R

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…

N

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

N

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.

N

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 .

N

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

N

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;

N

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 .

N

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

F

N

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

N

Qual a mensagem de erro?

F

F

Conseguiu achar o erro ?

N

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 ?

N

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