Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com SQL - count case when having


FabioMSouza

Pergunta

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

Editado por FabioMSouza
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...