Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ordenação de números inteiros de várias colunas


O problema que você parece ter é que cada coluna tem uma escala diferente e, portanto, você não pode combiná-las facilmente. Este problema pode ser resolvido usando uma técnica chamada clareamento. Isso envolve calcular a média e o desvio padrão de cada coluna (você pode fazer isso em 1 instrução SQL) e, em seguida, redimensionar cada coluna para isso ao selecionar:
colSortPos = (colValue-colMean) / colStdev

Fazer isso lhe dará cada coluna variando em torno de 0 que +/- 1 desvio padrão dentro do intervalo +/- 1. O truque então é combiná-los para que datas semelhantes fiquem juntas. O problema aqui é que este não é um problema bidimensional e, portanto, você precisa pensar multidimensionalmente. Portanto, minha sugestão é usar a distância euclidiana como sua ordem de classificação.
SELECT
    date,
    i,
    j,
    k,
    SQRT( POW(([email protected])/@iStdDEv, 2) + POW(([email protected])/@jStdDEv, 2) + POW(([email protected])/@kStdDEv, 2) )
AS
    sort_order
FROM
    table
ORDER BY
    sort_order

O único problema com isso é que projeta seu problema em um espaço unidimensional que pode fazer você perder algumas correlações. Para contornar isso, sugiro usar uma técnica de agrupamento como K-means, que é bastante simples de implementar e muito rápida. Isso permitirá que você agrupe suas datas em k clusters que exibem a maior semelhança [ http:// pt.wikipedia.org/wiki/K-means_clustering ]. Se você tiver os dados brutos e quiser brincar com essas (e outras) técnicas, sugiro experimentar o kit de ferramentas weka [ http://www.cs.waikato.ac.nz/ml/weka/ ] que permitirá que você brinque com essas técnicas.