Eu só posso imaginar fazer isso com duas consultas de banco de dados. O primeiro encontra o número de linhas no banco de dados e o segundo seleciona com um ORDER BY
na coluna em que estou interessado e LIMIT X, 1
onde X é metade do número de linhas.
Existe uma maneira simples de fazer isso com apenas uma consulta?
No momento estou usando médias em meus cálculos, mas acho que a média seria melhor; não há limite superior para os valores e eles são limitados a partir de baixo por 0.
EDIT: sim, eu quis dizer 'mediana', mas estava tendo algum erro cerebral e procurei 'média'. Agora encontrei a resposta no stackoverflow
Há bastante discussão aqui sobre o cálculo de valores medianos de uma tabela MySQL. Basta pesquisar na página por 'mediano'.
Como um aparte, parece-me negligente que não haja uma função interna para fazer isso. A mediana é muitas vezes mais descritiva da tendência central do que a média. Access/VBA tem o mesmo buraco em sua lista de funções.
Não vi uma solução em nenhum lugar que consiga obter a mediana em uma única consulta. Eu não me importo com tabelas temporárias, mas se elas não forem necessárias, ótimo! Aqui está o que eu inventei:
Eu testei isso para um conjunto uniforme e obtive a resposta certa. brand_prof é apenas duas colunas: brand_name e profit, um valor decimal. Se fossem valores inteiros, talvez você tivesse que converter "ceiling((CAST COUNT(*) AS DECIMAL)..." Mais do que eu testei. A ideia legal de usar um produto cartesiano e relacionar a soma dos sinais foi não é meu, infelizmente esqueci o autor.