-
Questão difícil, pensei que o having exigisse uma função de grupo mas não, comando realmente funciona (pelo menos no Oracle 11).
SELECT sum(preco)
FROM tblproduto
WHERE idtipo=5
GROUP BY preco
HAVING preco < 14
com os dados retorna duas linhas:
SUM(PRECO)
11
12,3
-
A questão estava assim mesmo ou está mal digitada?
-
a)SELECT MAX(preco) FROM tbproduto WHERE idtipo
igual a 5 ponto e vírgula
retornará 14,00 como resultado. #resultado 12,30
b)SELECT sum(preco) FROM tbproduto WHERE idtipo
igual a 5
GROUP BY preco
HAVING preco menor que 14 ponto e vírgula
retornará dois registros # registros: 12,30 e 11; Questão correta
c)SELECT sum(preco) as total FROM tbproduto
WHERE idtipo in (1,5) and nome like abre aspa
simples porcentagem e fecha aspa simples group
by idtipo having sum(preco) maior que 13 ponto
e vírgula
retornará 26,00 como resultado. #total = 30
d)SELECT nome FROM tbproduto WHERE idtipo not in
(5) and preco maior que (select min(preco)
from tbproduto where idtipo igual a 1) ponto
e vírgula
retornará apenas leite como resultado. # leite e azeite
e)SELECT asterisco FROM tb produto WHERE preco
BETWEEN 10 AND 12 ponto e vírgula
retornará cinco registros.#(25, creme, 3, 11,50; 42,sabão,5,11,00)
-
a) SELECT MAX(preco) FROM tbproduto WHERE idtipo = 5;
(retornará 14,00 como resultado).
b) SELECT sum(preco) FROM tbproduto WHERE idtipo = 5 GROUP BY preco HAVING preco < 14;
(retornará dois registros).
c) SELECT sum(preco) as total FROM tbproduto WHERE idtipo in (1,5) and nome like '%' group by idtipo having sum(preco) > 13;
(retornará 26,00 como resultado).
d) SELECT nome FROM tbproduto WHERE idtipo not in (5) and preco > (select min(preco) from tbproduto where idtipo = 1);
(retornará apenas leite como resultado).
e) SELECT * FROM tb produto WHERE preco BETWEEN 10 AND 12;
(retornará cinco registros).
-
Estava assim. Tomara que não seja uma nova moda, pq pqp. A falta de criatividade está de mais.
-
É possível entender a Questão, mas nenhum banco de dados reconhece as instruções "igual a " ou "ponto e virgula".
-
Vamos comentar cada uma das alternativas. Na letra A, o retorno seria 11,00 e não 14,00, pois o resultado intermediário é filtrado pelo idtipo=5. A alternativa B é a nossa resposta.
A alternativa C vai somar os preços de todos os produtos que terminam com a letra e (nome like “%e”), totalizando, 51,50. Já a letra D vai retornar os nomes leite e azeite, que são todos os elementos que não pertencem ao grupo 5 e os respectivos preços são maiores que 12,75 (menor preço do tipo 1). Por fim, a alternativa E retornará apenas 2 registros.
-
A questão não estava assim. Podem checar no site da CESPE.
-
Tem que ser muito estúpido pra escrever uma questão de SQL assim... pqp
-
Erro do QC na transcrição, na prova ta normal
-
Como assim retornam dois registros? Vai retornar um registro que seria a SOMA das duas ocorrências da consulta SQL (preço do shampoo + preço do arroz)
-
A letra B deveria retornar o valor da soma dos dois registros e não os dois registros, Se você rodar esse comando você terá apenas um valor que é o da soma dos preços que satisfazem as condições.
SELECT sum(preco) FROM tbproduto WHERE
idtipo=5
GROUP BY preco
HAVING preco < 14;
retornará dois registros
-
O item correto é a letra B. A consulta retorna dois registros porque há uma cláusula GROUP BY sobre o campo preço. A cláusula GROUP BY agrupa todos os registros retornados pela consulta que tenham o mesmo valor para os campos que estão sendo agrupados. Nesse caso, como os dois registros envolvidos na consulta (aqueles de idtipo = 5, shampoo e sabão) têm valores diferentes, o resultado é composto por dois grupos - um dos registros com preço igual a 11,00 e outro com os registros de preço igual a 12,30. Como só existe um registro em cada um dos grupos, a função de agregação SUM acaba não servindo para nada nesse caso. O resultado seria o mesmo sem ela. É uma consulta um pouco atípica por utilizar agrupamento e função de agregação sobre o mesmo campo, mas a resposta está correta.
-
a) Errada. Este comando procura pelo maior preço, indicado por MAX(preco), dentro da tabela tbproduto onde o idtipo tem o valor 5. Ao procurar todos os registros cujo idtipo é igual a 5, encontramos 2 registros. Um deles é o sabão e tem o preço de 11,00 e o outro é o shampoo, cujo preço é de 12,30. Queremos o que tem o maior preço de todos. Logo a resposta é 12,30.
c) Certa. O comando utilizado na assertiva B é interessante.
Mas, cuidado para não confundir o comando da alternativa com o comando a seguir: “SELECT sum(preco) FROM tbproduto WHERE idtipo=5”. Este último comando mostra a soma de todos os preços dos registros cujo idtipo seja 5.
Mas o comando da alternativa não é exatamente isso. Ele tem a cláusula “GROUP BY” seguido do “HAVING”.
O “GROUP BY” vai fazer com que o comando mostre todos os preços antes de fazer a soma. Neste caso, ele irá mostrar os valores 11,00 e 12,30. Estes valores são menores do que 14, o que satisfaz a condição do HAVING.
c) Errada. Quando colocamos a condição “nome like ‘%e’”, significa que o campo nome pode dar “match” com qualquer sequência de caracteres, seguida do caractere e. O % é um caractere coringa e significa uma sequência qualquer de caractere. Outro exemplo seria “nome like ‘%Oliveira’”. Esta condição indica que qualquer sequência de caracteres seguida de um “Oliveira” vai resultar em verdadeiro.
Analisando a consulta inteira, vemos que ela irá atuar da seguinte forma: para cada idtipo de 1 até 5 (idtipo in (1, 5)), considerando somente os produtos que tenham o nome terminado pela letra ‘e’ (nome like ‘%e’), serão somados todos os preços relativos a cada idtipo. A soma de cada idtipo só aparecerá no resultado final caso ela seja maior do que 13 (having sum(preco) > 13). Então o resultado será: Total 40,00.
Observação da letra c):O resultado parcial, antes de “having sum(preco) > 13” é: 40,00
O valor 40 vem da soma dos preços 14 (leite), 12,75 (carne) e 13,25 (azeite), todos do idtipo 1, cujos nomes terminam com a letra ‘e’.
d) Errada. Primeiro temos que analisar a consulta interna “select min(preco) from tbproduto where idtipo = 1”. Ela é uma consulta simples e procura pelo menor preço (min(preco)) de todos os produtos cujo idtipo é igual 1. Este resultado é 12,75. A consulta então passa a ser: SELECT nome FROM tbproduto WHERE idtipo not in (5) and preco > 12,75. A alternativa quer o nome do produto, cujo idtipo não esteja no conjunto (5), isto é, que esteja dentro de (1, 2, 3 e 4) e cujo preço seja maior do que 12,75. O resultado da consulta terá dois registros, que são o leite e o azeite.
e) Errada. A consulta desta alternativa procura por todos os registros que têm o preço entre 10,00 e 12,00. De todos, o creme, cujo preço é 11,50, e o sabão, cujo preço é 11,00, são retornados pela consulta.
Fonte: Patrícia Quintão.