Ir para conteúdo

POWERED BY:

Arquivado

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

pedrokl

[Resolvido] Saber qual item aparece mais

Recommended Posts

Boa noite, estou com uma dúvida, já tentei de várias maneiras mas nenhuma com o resultado esperado.

 

Considere a tabela:

 

id|valor|relacao

----------------

1|375|cigarro

2|250|coca-cola

3|250|coca-cola

4|375|cigarro

5|750|cigarro

6|200|halls

7|1500|cigarro

...

 

bom, a dúvida é a seguinte:

 

Como eu posso saber, através do SQL, qual item aparece mais na tabela?

 

Eu pensei em fazer assim, COUNT() as alguma coisa depois fazer outra pesquisa para somar os valores, no caso o resultado final seria:

'cigarro - 3000'

 

Mas para fazer essa soma eu precisava saber antes qual item aparece mais, ou existe outra maneira, em um SQL só talvez?

 

desculpe se não deu pra entender direito, qualquer coisa pode perguntar!

 

bom, testei algumas coisas e até agora aconteceu isso:

 

4 vezes cigarro - 3000 | 2 vezes coca-cola - 5000 | 1 vez halls - 200

 

SQL ficou assim:

 

SELECT COUNT(relacao) AS var1, SUM(valor) AS var2, relacao FROM tabela GROUP BY relacao

 

Bom, o que eu preciso é o seguinte:

 

imagine que ao inves de 2 vezes, apareceram 4 vezes coca-cola (igual 4 vezes cigarro), eu precisava comparar os dois resultados que mais apareceram, comparar seus valores e mostrar APENAS o de mais valor. Exemplo:

 

4 vezes cigarro - 3000 > 4 vezes coca-cola 1000

 

MOSTRAR APENAS

 

4 vezes cigarro - 3000

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia é você primeiro obter qual relacao aparece mais vezes e usar esse valor como condicional WHERE de uma subquery

 

Pesquisando um pouco, a primeira parte (contagem) você pode fazer assim:

 

SELECT`relacao` FROM `produtos` GROUP BY `relacao` ORDER BY COUNT(*) DESC LIMIT 1
Normalmente o COUNT(*) viria logo o último campo desejado, antes do FROM, acompanhado ou não de um AS, mas eu não consegui usar o reusltado na subquery abaixo :P

 

SELECT `relacao`, SUM( `valor` ) FROM `produtos` WHERE `relacao` = ( SELECT`relacao` FROM `produtos` GROUP BY `relacao` ORDER BY COUNT(*) DESC LIMIT 1 )
Isso vai retornar a coluna com o nome e o valor das ocorrências somadas.

 

O manual desaconselha o uso de subqueries, diz que é possível fazer com JOIN, mas eu desconheço.

 

Veja se ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu assim:

 

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO:

 

Obrigado pela ajuda Imaggens, mas eu procurei aqui e achei e pra quem interessar, ficou assim:

 

$sql = "SELECT relacao, SUM(valor) as vezes, COUNT(relacao) FROM tabela GROUP BY relacao HAVING COUNT(relacao) = (SELECT MAX(A.CNT) FROM (SELECT COUNT(relacao) AS CNT FROM tabela GROUP BY relacao) as A)"

 

ai no php:

 

$qr = mysql_query($sql) or die(mysql_error());
	
$maior = mysql_result($qr, 0, "relacao");
$valor = mysql_result($qr, 0, "vezes");

echo "Você gastou $valor em $maior";

RETORNA:

Você gastou 3000 em cigarro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, resta agora algum moderador ou alguém experiente postar um parecer de qual query é melhor.

 

Também fiquei na curiosiade...

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.