-
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