Pesquisar na Comunidade
Mostrando resultados para as tags ''having''.
Encontrado 2 registros
-
Bom dia, Segue um exemplo detalhado do problema, não consigo obter o total de registros para fazer a paginação. Quero entender porque o count com filtro 'venda' feito com having me retorna 3 linhas em vez de pegar o total. Desde já agradeço a ajuda! :) imovel ------------------------------------- id_imovel imovel publicado ----------- ---------- ------------ 1 imovel 01 1 2 imovel 02 1 3 imovel 03 1 4 imovel 04 1 imovel_custom ------------------------------------- imovel_id key value ----------- ---------- ---------- 1 transacao locacao 1 valor 10.0 1 area 120.0 2 transacao venda 2 valor 100.0 2 area 130.0 3 transacao venda 3 valor 110.0 3 area 140.0 4 transacao venda 4 valor 120.0 4 area 150.0 Lista com todos os tipos de transação: SELECT i.*, ic.*, MAX(CASE WHEN ic.key = 'transacao' THEN ic.value ELSE NULL END) AS transacao, MAX(CASE WHEN ic.key = 'valor' THEN ic.value ELSE NULL END) AS valor, MAX(CASE WHEN ic.key = 'area' THEN ic.value ELSE NULL END) AS area FROM imovel AS i LEFT JOIN imovel_custom AS ic ON i.id_imovel = ic.imovel_id WHERE publicado='1' GROUP BY i.id_imovel Resultado ------------------------------------------------------------------------- id_imovel imovel publicado transacao valor area ----------- ---------- ------------ ---------- ---------- ---------- 1 imovel 01 1 locacao 10.0 120.0 2 imovel 02 1 venda 100.0 130.0 3 imovel 03 1 venda 110.0 140.0 4 imovel 04 1 venda 120.0 150.0 Count para paginação com todos os tipos de transação: SELECT COUNT(DISTINCT i.id_imovel) as total FROM imovel AS i LEFT JOIN imovel_custom AS ic ON i.id_imovel = ic.imovel_id WHERE publicado='1' Resultado --------------------------------------------------------------- total --------- 4 Lista com transação venda: SELECT i.*, ic.*, MAX(CASE WHEN ic.key = 'transacao' THEN ic.value ELSE NULL END) AS transacao, MAX(CASE WHEN ic.key = 'valor' THEN ic.value ELSE NULL END) AS valor, MAX(CASE WHEN ic.key = 'area' THEN ic.value ELSE NULL END) AS area FROM imovel AS i LEFT JOIN imovel_custom AS ic ON i.id_imovel = ic.imovel_id WHERE publicado='1' GROUP BY i.id_imovel HAVING transacao='venda' Resultado ------------------------------------------------------------------------- id_imovel imovel publicado transacao valor area ----------- ---------- ------------ ---------- ---------- ---------- 2 imovel 02 1 venda 100.0 130.0 3 imovel 03 1 venda 110.0 140.0 4 imovel 04 1 venda 120.0 150.0 Count para paginação com transação venda: SELECT COUNT(DISTINCT i.id_imovel) as total FROM imovel AS i LEFT JOIN imovel_custom AS ic ON i.id_imovel = ic.imovel_id WHERE publicado='1' GROUP BY i.id_imovel HAVING ( MAX(CASE WHEN ic.key = 'transacao' THEN ic.value ELSE NULL END)='venda' ) Resultado --------------------------------------------------------------- total --------- 1 1 1
-
Olá pessoal, poderiam me ajudar? Tenho as seguintes tabelas: CREATE TABLE horariofuncionario ( codigo_horariofuncionario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, codigo_statushorariofuncionario INTEGER UNSIGNED NOT NULL, codigo_funcionario INTEGER UNSIGNED NOT NULL, horario_horariofuncionario VARCHAR(5) NOT NULL, data_horariofuncionario VARCHAR(10) NOT NULL, nomeDiaSemana_horariofuncionario VARCHAR(15) NOT NULL, PRIMARY KEY(codigo_horariofuncionario), FOREIGN KEY(codigo_funcionario) REFERENCES funcionario(codigo_funcionario) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(codigo_statushorariofuncionario) REFERENCES statushorariofuncionario(codigo_statushorariofuncionario) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE servicosalao ( codigo_servicosalao INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, codigo_salao INT NOT NULL, codigo_servico INTEGER UNSIGNED NOT NULL, preco_servicosalao VARCHAR(20) NULL, tempo_servicosalao INTEGER UNSIGNED NULL, descricao_servicosalao VARCHAR(200) NULL, PRIMARY KEY(codigo_servicosalao), FOREIGN KEY(codigo_salao) REFERENCES salao(codigo_salao) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(codigo_servico) REFERENCES servico(codigo_servico) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE statushorariofuncionario ( codigo_statushorariofuncionario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome_statushorariofuncionario VARCHAR(30) NOT NULL, PRIMARY KEY(codigo_statushorariofuncionario) ); Preciso selecionar os HORARIOFUNCIONARIO.horario_horariofuncionario em que o HORARIOFUNCIONARIO.codigo_statushorariofuncionario seja 1 ou 3 e que não contenha nenhum registro na tabela horariofuncionario em que o HORARIOFUNCIONARIO.horario_horariofuncionario esteja entre o HORARIOFUNCIONARIO.horario_horariofuncionario e o HORARIOFUNCIONARIO.horario_horariofuncionario + SERVICOSALAO.tempo_servicosalao e o HORARIOFUNCIONARIO.codigo_statushorariofuncionario seja igual a 2. Então tenho a query: SELECT hf.horario_horariofuncionario FROM horariofuncionario hf WHERE hf.codigo_statushorariofuncionario IN (1,3) HAVING (SELECT COUNT(hf.codigo_horariofuncionario) FROM horariofuncionario hf NATURAL JOIN servicosalao ss WHERE hf.codigo_statushorariofuncionario = 2 AND STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') BETWEEN STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') AND SEC_TO_TIME( SUM( TIME_TO_SEC( STR_TO_DATE(hf.horario_horariofuncionario,'%H:%i') ) + TIME_TO_SEC( STR_TO_DATE(ss.tempo_servicosalao,'%H:%i') ) ) ) ) < 1;Está retornando o erro: Invalid use of group function ErrorNr 1111