SóProvas


ID
605659
Banca
CESPE / CEBRASPE
Órgão
EBC
Ano
2011
Provas
Disciplina
Banco de Dados
Assuntos

A respeito de sistema de gerência de banco de dados (SGBD),
julgue os itens a seguir.

Se um comando SELECT contiver a cláusula GROUP BY, todas as colunas selecionadas pelo SELECT terão de estar na cláusula GROUP BY.

Alternativas
Comentários
  • Uma coluna pode ser selecionada com um totalizador (count, max) e não estar na cláusula group by
  • Se um comando SELECT contiver a cláusula GROUP BY, todas as colunas selecionadas pelo SELECT terão de estar na cláusula GROUP BY.

    Para mim esta errado

    poso selecionar colunas no select e nao preciso colacalas no group by:

    Exemplo

    SELECT nome, idade FROM  pessoa GROUP BY nomd_da_mae LIKE %maria%

    alguem me explique pq esta errado
  • Mauricio, Acredito que a banca utilizou o termo "selecionadas" como sinônimo para projetadas (da algebra relacional). Desta forma totalizadores não são projeções da clausula select.

    Thiago, Não entendi seu select poderia colocar um exemplo melhor (com tabelas por exemplo)?
  • É pessoal, em um comando SELECT com cláusula GROUP BY, poderiamos ter colunas referênciadas no SELECT sem ter no GROUP BY, se estivessemos falando de MySQL que extende esse comando de forma a implementar essa feature. No padrão SQL não é assim. E nem no Postgre.
    Olha o que está escrito na documentação do MySQL:
    "In standard SQL, a query that includes a GROUP BY clause cannot refer to nonaggregated columns in the select list that are not named in the GROUP BY clause. For example, this query is illegal in standard SQL because the name column in the select list does not appear in the GROUP BY:
    SELECT o.custid, c.name, MAX(o.payment)  FROM orders AS o, customers AS c  WHERE o.custid = c.custid  GROUP BY o.custid;
    MySQL extends the use of GROUP BY so that the select list can refer to nonaggregated columns not named in the GROUP BY clause."
    E aqui está o link: http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html
  • Pessoal, fiz  o teste no mysql e é sim possível fazer, porem o que acontece é que a perda de informação, mas acho que a questão nõ levou isso em conta.

    SELECT nome FROM clientes group by nasc

    tabela normal

    leandro    12-02-02
    leandro2    12-02-02

    no agrupamento somente será mostrado um dos dois nomes, acredito que sem critério de seleção
  • Cara, não sei qual SGBD voce testou, mas isso nao funciona em SqlServer, nao funciona por 2 motivos, primeiro porque nao pode existir um like na clausula group by, segundo porque faltava referenciar a coluna Idade.
  • From W3School:


    GROUP BY More Than One Column

    We can also use the GROUP BY statement on more than one column, like this:

    Example

    SELECT Shippers.ShipperName, Employees.LastName,
    COUNT(Orders.OrderID) AS NumberOfOrders
    FROM ((Orders
    INNER JOIN Shippers
    ON Orders.ShipperID=Shippers.ShipperID)
    INNER JOIN Employees
    ON Orders.EmployeeID=Employees.EmployeeID)
    GROUP BY ShipperName,LastName;


    http://www.w3schools.com/sql/sql_groupby.asp
  • "É a regra do SQL, todo campo selecionado com uma função agregadora tem que existir no group by,se voce não colocar no group by o SQL não vai entender que voce quer agrupar o resultado para determinados campos e quando o SQL criar o plano de execução irá retornar o erro informando que há campos que não são de funções agregadas e não estão no group by."


    ArmandoLacerda - IT Consultant - Self Emp...(Partner)

    https://social.msdn.microsoft.com/Forums/

  • SELECT Nome, Idade, Profissão, Salario FROM TRABALHADOR GROUP BY Idade HAVING Idade>60

    Consulta que seleciona os funcionários da 3 idade em uma empresa e que nem todas as colunas selecionadas pelo select estão no group by.

  • Pelo post do Helio, o mais comum é usarmos o Group BY com apenas uma coluna...

  • Encontrei essas bibliografias abordando isso...

     

    Quando sua consulta contém uma função agregada — e recupera colunas não colocadas dentro de uma função agregada —, essas colunas devem ser colocadas em uma cláusula GROUP BY.

    Fonte: Oracle Database 11G SQL: Domine SQL e PL/SQL no banco de dados Oracle - Jason Price

     

    Devemos saber que para obter sucesso em nossos agrupamentos, as colunas que não estão sendo agrupadas pelas funções de agrupamento devem ser agrupadas pelo group by. Também podemos agrupar determinadas colunas, mesmo que elas não estejam presentes na cláusula select.

    Fonte: PL/SQL: Domine a linguagem do banco de dados Oracle - Eduardo Gonçalves