Maiores valores java/mysql

17 respostas
Mara1

Tenho que selecionar os 3 maiores valores de uma linha…

ex:

vot1/vot2/vot3/vot4/vot5

1/2/3/4/5

para aparecer:

vot5/vot4/vot3
5/4/3

tem algum comando no mysql que resolva isso ?? Ou tenho que verificar usando codigos no netbeans mesmo ?? :?

17 Respostas

nel

Oi,

como assim uma linha ? O que seria essa linha, um registro no banco de dados ? Campos de uma tabela?
Não compreendi sua necessidade :slight_smile:

Mara1

Registros…

Pois só consegui usar o MAX() nos Campos…

Preciso selecionar os registros pela chave primaria e verificar quais valores são maiores.

“SELECT * FROM votacao WHERE cod = 1” (exemplo)

só que nessa consulta quero apenas os 3 maiores valores dos registros dessa chave primaria.

E

select * from tabela order by campo1 desc limit 0,3

Mara1

mas isso vai ordenar um campo…

eu quero que ordene uma linha…

ex: a chave primaria 1 tem 5 campos 1,2,3,4,5

então eu quero q selecione os 3 maiores…

E

Dá para fazer algo assim

select id, case when campo1 > campo2 and campo1 > campo3 and campo1 > campo4 and campo1 > campo5 then campo1 when campo2 > campo3 and campo2 > campo4 and campo2 > campo5 then campo2 when campo3 > campo4 and campo3 > campo5 then campo3 when campo4 > campo5 then campo4 else campo5 end from tabela (é só vc ir melhorando a lógica)

Mas sinceramente, acho que o desempenho seria melhor se trouxesse para o java e fizesse o ordenamento lá, ou se usasse variáveis no mysql.

Mara1

Como faço esse ordenamento em java ??

yhhik

ordene direto na sua consulta sql.

Mara1

Não entendi :?

eu não sei qual o maior valor… vou usar aquele código de antes na consulta ? É isso ??

yhhik

maus… não tinha lido o poste anterior…

use um algoritmo de ordenação existem vários…bubleshot, binário,ordenação direta…
pesquise sobre algoritmo de ordenação por seleção direta é o mais fácil de entender…depois é só adaptalo ao seu caso.

E

estava olhando, existe a função GREATEST, mas não sei se funcionaria para pegar o segundo e terceiro.

Mara1

yhhik vou pesquisar sobre isso…

e evefuji como usa a a função GREATEST ?? já é alguma coisa :lol:

E

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest

Mara1

Acho q o GREATEST vai dar certo…

Mara1

É o GREATEST só encontra o primeiro mesmo… :cry: tentei usar o EXCEPT mais não deu certo…

alguma idéia??

E

se quer fazer mesmo no mysql, vou dar uma sugestão. (se fosse no oracle ou no postgre teria outras opções mais viáveis, mas no mysql não conheço)

create view tmpTable as
  select id, campo1
  from tabela
  union all
  select id, campo2
  from tabela
  union all
  select id, campo3
  from tabela
  union all
  select id, campo4
  from tabela
  union all
  select id, campo5
  from tabela;

  select a.id, a.campo1
  from tmpTable     a
  inner join tmpTable b
  on a.id = b.id
  and a.campo1 <= b.campo1
  group by a.id, a.campo1
  having count(*) <= 3
Mara1

Tem alguma forma de aparecer o nome do campo usando o GREATEST ?? pq só aparece o valor…e tendo o nome do campo daria pr fazer tipo um filtro no netbeans…

E

A consulta que te passei não funcionou? Não cheguei a testar, mas faz o teste aí.

É só mudar o nome da tabela e o “campo1” … pelo campo. Tenta entender bem o que está sendo feito, não é uma lógica complexa.

Criado 1 de novembro de 2011
Ultima resposta 2 de nov. de 2011
Respostas 17
Participantes 4