Página 1 de 1
Subquery MySQL
Enviado: 25 Ago 2016 20:09
por JoséQuintas
Este comando funcionou, mas achei esquisito misturar dois filtros em um.
Nem dá pra saber se faz a query completa pra depois filtrar, ou se o filtro tá valendo no primeiro agrupamento..
É isso mesmo?
Ou é o HeidiSql?
Código: Selecionar todos
select count(*) AS QTD FROM
(
select
locador, locatario, sum(rateio) as soma
from hldimrat
group by locador, locatario
) AS resultado
where soma = 100 and locador=3304
O resultado deu certo. retornou apenas desse locador, e a quantidade de locatários com rateio somando 100%.
Subquery MySQL
Enviado: 25 Ago 2016 21:14
por JoséQuintas
Agora que entendi é isso mesmo, e faz o total.
Primeiro vai fazer esta
Código: Selecionar todos
select
locador, locatario, sum(rateio) as soma
from hldimrat
group by locador, locatario
AS resultado
E depois esta
Código: Selecionar todos
select COUNT(*) as QTD from RESULTADO where soma=100 AND locador=3304
Ruim isso.
Deveria poder usar o WHERE no subselect, pra ser mais rápido.
Tudo bem que 1 segundo não é muito, mas seria trabalho à toa somar todos os outros.
Subquery MySQL
Enviado: 25 Ago 2016 21:26
por JoséQuintas
Ok, resolvido.
Tava colocando o where depois do group by, e por isso não aceitava.
Agora sim.
Código: Selecionar todos
select count(*) AS QTD FROM
(
select
locador, locatario, sum(rateio) as soma
from hldimrat
where locador=3304
group by locador, locatario
) AS resultado
where soma = 100
Subquery MySQL
Enviado: 26 Ago 2016 11:21
por alxsts
Olá!
Assim fica mais lógico e rápido:
Código: Selecionar todos
select count(*) AS QTD FROM
(
select
locador, locatario, sum(rateio) as soma
from hldimrat
where locador=3304 AND soma = 100
group by locador, locatario
) AS resultado
A ordem correta das cláusulas, quando necessárias, é sempre WHERE, GROUP BY, HAVING e, sempre por último, ORDER BY.
Subquery MySQL
Enviado: 26 Ago 2016 11:43
por JoséQuintas
Estranharia se funcionasse.
Não dá pra aplicar esse where, porque não existe o campo SOMA no banco de dados.
Não lembro pra que serve o HAVING, não seria pra algo assim?.
Subquery MySQL
Enviado: 26 Ago 2016 11:47
por JoséQuintas
Achei um exemplo.
Código: Selecionar todos
SELECT name, COUNT(name) AS c FROM orders
GROUP BY name
HAVING c = 1;
E testei isto e foi.
Código: Selecionar todos
select count(*) AS QTD FROM
(
select
locador, locatario, sum(rateio) as soma
from hldimrat
where locador=3304
group by locador, locatario having soma=100
) AS resultado
Subquery MySQL
Enviado: 26 Ago 2016 11:53
por alxsts
Olá!
Funcionaria assim:
Código: Selecionar todos
select count(*) AS QTD FROM
(
select
locador, locatario, sum(rateio) as soma
from hldimrat
where locador=3304 AND sum(rateio) = 100
group by locador, locatario
) AS resultado
Mas a solução mais correta mesmo é esta última, com HAVING.
Em SQL, WHERE filtra linhas e HAVING filtra grupos de linhas e por isto sempre vem após um GROUP BY.
Subquery MySQL
Enviado: 26 Ago 2016 12:00
por alxsts
Olá!
Este exemplo que você postou é a base para localizar registros com mais de uma ocorrência em uma tabela. É só trocar o sinal de igual a por maior que.
Código: Selecionar todos
SELECT name, COUNT(name) AS c
FROM orders
GROUP BY name
HAVING c > 1;
O código acima lista nomes repetidos na tabela Orders.
Subquery MySQL
Enviado: 26 Ago 2016 12:18
por JoséQuintas
Aquele exemplo encontrei no site do MySQL.
No meu caso, o locador tem vários locatários.
E em cada locatário é definido rateio pra uma ou mais pessoas, colocando percentual em cada pessoa.
O comando é pra pegar quantos locatários de um locador tem o preenchimento de 100%.
Código: Selecionar todos
locador JOAO
locatário JUCA ===> aqui soma 60%
rateio 10% FILHO CHICO
rateio 20% FILHO ANTONIO
rateio 30% FILHA MARIA
Subquery MySQL
Enviado: 26 Ago 2016 12:26
por JoséQuintas
Ok, li rápido seu post e me confundi.
Este exemplo que você postou é a base
ele serve como base para pesquisar duplicados.
Já tinha me perguntado como fazer isso, e nem reparei.
Bem observado.
Subquery MySQL
Enviado: 26 Ago 2016 13:51
por Poka
Quintas e Alexandre
Muito útil esses tipos de comentários.
Vamos aprendendo aqui também
Um abraço
Poka
Subquery MySQL
Enviado: 27 Ago 2016 13:59
por alxsts
Olá!
Valeu Poka! Obrigado pelo incentivo.