Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

diegohamaz

COUNT DESC mais de um e possivel?

Recommended Posts

Galera é possivel eu executar essa query com mais de uma coluna

 

SELECT IFNULL( CONVERT( REPLACE( T1.CP_tabela01_070B, '.', '' ) , decimal ) , 0 ) , COUNT( T1.CP_tabela01_070B )
FROM TB_tabela01T1
LEFT JOIN TB_tabela01_PDV T2 ON T2.NM_CNPJ = T1.NM_CNPJ
WHERE T1.ST_REGISTRO =1
AND T1.DT_COLETA
BETWEEN '20140101'
AND '20140701'
AND T2.NM_REGIAO = 'SUDESTE'
AND (

T1.CP_tabela01_070A = 'OK'

)
GROUP BY T1.CP_tabela01_070B
ORDER BY COUNT( T1.CP_tabela01_070B ) DESC
LIMIT 0 , 30

 

queria acrescentar mais colunas mas nao esta funcionando o order by count é possivel fazer mais de 1 com order by count??

 

tipo ORDER BY COUNT( T1.CP_tabela01_070B ),COUNT( T1.CP_tabela01_080B ),COUNT( T1.CP_tabela01_090B ) DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ordenação não altera o "result set", então o problema deve ser nas condições passadas, verifique :

 

Se os tipos (types) batem (data etc)

Se existem as condições passadas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ainda estou com esse problema negócio é o seguinte tenho essa query:

 

 

SELECT
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_070B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_080B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_090B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_100B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_110B, '.', '' ) , decimal ) , 0 )

FROM TB_MIDEA01 T1
LEFT JOIN TB_MIDEA01_PDV T2 ON T2.NM_CNPJ = T1.NM_CNPJ
WHERE T1.ST_REGISTRO =1
AND T1.DT_COLETA BETWEEN '20140401' AND '20140501'
AND T2.NM_REGIAO = 'SUDESTE'
GROUP BY T1.CP_MIDEA01_070B,T1.CP_MIDEA01_080B,T1.CP_MIDEA01_090B,T1.CP_MIDEA01_100B,T1.CP_MIDEA01_110B
ORDER BY COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_070B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_080B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_090B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_100B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_110B, '.', '' ),decimal)) DESC LIMIT 1

 

ela me retorna os primeiros resultados tudo zerado... traz 0 0 0 0 339, apenas da coluna 110B

 

 

ai quando faço assim com um resultado só que veio zerado ele me traz resultado 229

 

 

SELECT
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_070B, '.', '' ) , decimal ) , 0 )

FROM TB_MIDEA01 T1
LEFT JOIN TB_MIDEA01_PDV T2 ON T2.NM_CNPJ = T1.NM_CNPJ
WHERE T1.ST_REGISTRO =1
AND T1.DT_COLETA BETWEEN '20140401' AND '20140501'
AND T2.NM_REGIAO = 'SUDESTE'
GROUP BY T1.CP_MIDEA01_070B
ORDER BY COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_070B, '.', '' ),decimal)) DESC LIMIT 1

 

Ou seja ele faz o desc apenas no ultimo campo ele nao aceita multiplos campos no order by

como posso resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem um LIMIT 1 também , atentou a isto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

As tabelas estão iguais os dados eu preciso dar mais de 1 (UM) COUNT(COLUNA) DESC na clausula ORDER BY

porem estou vendo que nao é possivel.

 

Tipo order by COUNT(coluna1) ,COUNT(coluna2) DESC

 

porem ele da o desc apenas na coluna 2 nao aplica em todas , entendeu agora?

 

tem um LIMIT 1 também , atentou a isto ?

Sim tem que me retornar só 1 registro(1 linha) dos registros mais encontrados na tabela das respectivas colunas.

 

Estou me matando pra arrumar isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi confesso, publica o exemplo de como estão saindo os dados e como deveriam

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa query abaixo

 

 

SELECT
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_070B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_080B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_090B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_100B, '.', '' ) , decimal ) , 0 ),
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_110B, '.', '' ) , decimal ) , 0 )

FROM TB_MIDEA01 T1
LEFT JOIN TB_MIDEA01_PDV T2 ON T2.NM_CNPJ = T1.NM_CNPJ
WHERE T1.ST_REGISTRO =1
AND T1.DT_COLETA BETWEEN '20140401' AND '20140501'
AND T2.NM_REGIAO = 'SUDESTE'
GROUP BY T1.CP_MIDEA01_070B,T1.CP_MIDEA01_080B,T1.CP_MIDEA01_090B,T1.CP_MIDEA01_100B,T1.CP_MIDEA01_110B
ORDER BY COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_070B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_080B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_090B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_100B, '.', '' ),decimal)), COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_110B, '.', '' ),decimal)) DESC LIMIT 1

Me retorna isso

 

teste1.jpg

 

Agora se eu rodo isso

 

 

SELECT
IFNULL( CONVERT( REPLACE( T1.CP_MIDEA01_070B, '.', '' ) , decimal ) , 0 )

FROM TB_MIDEA01 T1
LEFT JOIN TB_MIDEA01_PDV T2 ON T2.NM_CNPJ = T1.NM_CNPJ
WHERE T1.ST_REGISTRO =1
AND T1.DT_COLETA BETWEEN '20140401' AND '20140501'
AND T2.NM_REGIAO = 'SUDESTE'
GROUP BY T1.CP_MIDEA01_070B
ORDER BY COUNT(CONVERT(REPLACE( T1.CP_MIDEA01_070B, '.', '' ),decimal)) DESC LIMIT 1

 

Ele me retorna com resultado

 

teste2.jpg

 

Ou seja o desc funcionou apenas pra ultima coluna , não consigo fazer order by count(coluna) desc com varias colunas do modo que fiz na primeira query, um jeito que acho que resolveria era com having e or porem todos as condições teriam que ser repassadas pra subquery,

 

Creio eu que existe uma maneira mais simples de retornar isso , só quero que me retorne em 1 unica query os resultados que mais apareceram de cada coluna , coluna 1 valor XPTO apareceu 35 vezes, coluna 2 valor XPTO apareceu 50 vezes e apresenta na linha, fui claro agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodou sem o LIMIT apenas para comparar os resultados ?

 

Na 1ª query rodou com o agrupamento igual as linhas do select (o mysql permite que seja diferente e creio que isto muda o comportamento da query) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, você quer que na primeira linha fiquem todos os maiores resultados, se for isso mesmo, não há como fazer sem subquerys.

 

Para fazer com subquerys, terá de fazer a consulta em cada coluna, e isto irá, com toda certeza, pesar no banco de dados, se não agora, possivelmente no futuro, o impacto pode ser menos utilizando todos os filtros possíveis.

 

Falta informações para realizar as subquerys (falta conhecer melhor os "filtros possíveis").

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.