Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
nao me retorna nada...
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
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'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'Ou seja ele faz o desc apenas no ultimo campo ele nao aceita multiplos campos no order by
como posso resolver isso?
Verificou os tipos das tabelas como o Motta especificou no #4?
Não entendi seu problema.
tem um LIMIT 1 também , atentou a isto ?
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.
Não entendi confesso, publica o exemplo de como estão saindo os dados e como deveriam
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'Me retorna isso
/applications/core/interface/imageproxy/imageproxy.php?img=http://cafeina.saads.com.br/teste1.jpg&key=7b049c09efab85efaf45358b3c94f3e4f20868614d39b33e7bb7595eeb9278a1" alt="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'Ele me retorna com resultado
/applications/core/interface/imageproxy/imageproxy.php?img=http://cafeina.saads.com.br/teste2.jpg&key=196b7a9793581423f7918adb6c2adc8a7d3129006903d8cc4985ce4c37a0787a" alt="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?
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) ?
Bom tive que mudar todo meu codigo e mudar toda a query ...obrigado
Resolveu ?
Nao resolvi.
Nao consigo dar count desc com mais de 1 coluna.
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").
O que dá de errado ?