( select avg(insc_quantia) as ttt
from zz_view_inscricao_completa
group by alunosProvincia )
ele seleciona as médias (avg), depois ele faz um select neste resultado (subselect), buscando o máximo.
isso porque ele primeiro precisa saber as médias, para depois poder calcular o máximo, entendeu?
SELECT *, max(ttt) FROM
( select avg(insc_quantia) as ttt
from zz_view_inscricao_completa
group by alunosProvincia )
as dddd
;
é facil
isso é um select e um subselect
o subselect é como uma tabela temporaria
vc esta dando um select nos dados que estao vindo do subselect
o nome da tua tabela temporaria é ‘dddd’ e vc esta somando uma o campo dela ‘ttt’
( select avg(insc_quantia) as ttt
from zz_view_inscricao_completa
group by alunosProvincia )
ele seleciona as médias (avg), depois ele faz um select neste resultado (subselect), buscando o máximo.
isso porque ele primeiro precisa saber as médias, para depois poder calcular o máximo, entendeu?
Abraço
[/quote]
olha valeu mano, !!! mas parece que nao leste bem,.
a minha duvida é apenas no segundo trecho.
porque o primeiro trecho fui eu que fiz , mas infelizmente o primeiro trecho nao funcionou, na minha logica e na minha teoria deveria funcionar, mas nao funcionou, e entao procurei na internet, e notei que devia fazer como esta no segundo trecho, e entao fiz e funcionou, mas o problema é que funcionou e mesmo assim eu nao entendi o porque que funcionou, e tambem nao entendi o porque que o primeiro trecho nao funcionou
[quote=papagaio]SELECT *, max(ttt) FROM
( select avg(insc_quantia) as ttt
from zz_view_inscricao_completa
group by alunosProvincia )
as dddd
;
é facil
isso é um select e um subselect
o subselect é como uma tabela temporaria
vc esta dando um select nos dados que estao vindo do subselect
o nome da tua tabela temporaria é ‘dddd’ e vc esta somando uma o campo dela ‘ttt’[/quote]
ok, agora estou a começar a entender a logica disso, valeu,
devo entender o subselect como uma tabela temporaria porque o subselect esta no campo from onde devia ficar os dados das ou da tabela.
o problema é que eu nao gosto que as coisas funcionem ,sem eu entender bem
valeu, ja entendi , e vou ver se exercito esta sintaxi, para ver se me acostumo,
mas ja agora eu acho que o primeiro trecho devia funcionar, nao entendo o porque que nao funciona??? tens alguma idea do que tem de errado no primeiro trecho??? :idea: :idea: :idea:
A diferença é que no segundo treço vc tira a média e depois agrupa, aí sim pega o maior valor
No primeiro vc tira a média, pega o maior valor e agrupa.
Tendeu?
[quote=sulito][quote=felipedamiani]neste trecho
( select avg(insc_quantia) as ttt
from zz_view_inscricao_completa
group by alunosProvincia )
ele seleciona as médias (avg), depois ele faz um select neste resultado (subselect), buscando o máximo.
isso porque ele primeiro precisa saber as médias, para depois poder calcular o máximo, entendeu?
Abraço
[/quote]
olha valeu mano, !!! mas parece que nao leste bem,.
a minha duvida é apenas no segundo trecho.
porque o primeiro trecho fui eu que fiz , mas infelizmente o primeiro trecho nao funcionou, na minha logica e na minha teoria deveria funcionar, mas nao funcionou, e entao procurei na internet, e notei que devia fazer como esta no segundo trecho, e entao fiz e funcionou, mas o problema é que funcionou e mesmo assim eu nao entendi o porque que funcionou, e tambem nao entendi o porque que o primeiro trecho nao funcionou[/quote]
fiz uma prova ontem que saiu uma pergunta desse genero, e entao cheguei em casa e recriei o cenario com outras tabelas de um banco de dados que eu tinha,
mas na prova eu meti como estava o primeiro trecho de codigo,
e cheguei em casa testei e nao funcionou, entao pesquisei e cheguei no segundo trecho
[quote=ateubh]A diferença é que no segundo treço vc tira a média e depois agrupa, aí sim pega o maior valor
No primeiro vc tira a média, pega o maior valor e agrupa.
Tendeu?
[quote=sulito][quote=felipedamiani]neste trecho
( select avg(insc_quantia) as ttt
from zz_view_inscricao_completa
group by alunosProvincia )
ele seleciona as médias (avg), depois ele faz um select neste resultado (subselect), buscando o máximo.
isso porque ele primeiro precisa saber as médias, para depois poder calcular o máximo, entendeu?
Abraço
[/quote]
olha valeu mano, !!! mas parece que nao leste bem,.
a minha duvida é apenas no segundo trecho.
porque o primeiro trecho fui eu que fiz , mas infelizmente o primeiro trecho nao funcionou, na minha logica e na minha teoria deveria funcionar, mas nao funcionou, e entao procurei na internet, e notei que devia fazer como esta no segundo trecho, e entao fiz e funcionou, mas o problema é que funcionou e mesmo assim eu nao entendi o porque que funcionou, e tambem nao entendi o porque que o primeiro trecho nao funcionou[/quote][/quote]
ok, valeu a dica, ja entendi a diferença entre eles. eu pensava que eu entendia tudo sobre consultas, mas notei que afinal ainda tem muitos segredos, valeu a força gujeiros todos os dias se aprende algo novo
Vou tentar explicar o quê entendi do seu problema.
Acredito que o código que vc escreveu (primeiro trecho) não funcionou porque o banco de dados que vc utiliza verifica se é possivel a execução de função (AVG) dentro de outra função (MAX). Nem todas funções podem ser executadas recebendo qualquer outra função como parametro, ha critérios para isso, me parece que é o seu caso ( MAX e AVG).
No código que vc encontrou na net (segundo trecho) acontece o seguinte): As execuções das funções acontecem SEPARADAS, primeiro ocorre a execução da função AVG no subselect (já foi explicado pelo nosso amigo) e logo em seguida a banco de dados executa a função MAX utilizando como parametro o resultado do subselect que utilizou o AVG. Ou seja, a idéia central do código é a separação e priorização das execuções das funções MAX e AVG. A função AVG é executada em primeiro lugar e a MAX em segundo e única ligação que existe entre elas são os dados resultantes.
Vou tentar explicar o quê entendi do seu problema.
Acredito que o código que vc escreveu (primeiro trecho) não funcionou porque o banco de dados que vc utiliza verifica se é possivel a execução de função (AVG) dentro de outra função (MAX). Nem todas funções podem ser executadas recebendo qualquer outra função como parametro, ha critérios para isso, me parece que é o seu caso ( MAX e AVG).
No código que vc encontrou na net (segundo trecho) acontece o seguinte): As execuções das funções acontecem SEPARADAS, primeiro ocorre a execução da função AVG no subselect (já foi explicado pelo nosso amigo) e logo em seguida a banco de dados executa a função MAX utilizando como parametro o resultado do subselect que utilizou o AVG. Ou seja, a idéia central do código é a separação e priorização das execuções das funções MAX e AVG. A função AVG é executada em primeiro lugar e a MAX em segundo e única ligação que existe entre elas são os dados resultantes.
flws
[/quote]
Mas gostei da tua logica de raciocinio,