pedrokl 0 Denunciar post Postado Junho 6, 2010 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
Bruno Augusto 417 Denunciar post Postado Junho 6, 2010 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 1Normalmente 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
pedrokl 0 Denunciar post Postado Junho 6, 2010 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
Bruno Augusto 417 Denunciar post Postado Junho 6, 2010 Bom, aqui funcionou direitinho <_< Compartilhar este post Link para o post Compartilhar em outros sites
pedrokl 0 Denunciar post Postado Junho 6, 2010 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
Bruno Augusto 417 Denunciar post Postado Junho 6, 2010 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