sql >> Databasteknik >  >> RDS >> Mysql

Heltalsordning med flera kolumner

Problemet du verkar ha är att varje kolumn har olika skala och så du kan inte enkelt kombinera dem. Detta problem kan lösas med en teknik som kallas blekning. Detta innebär att beräkna medelvärdet och standardavvikelsen för varje kolumn (du kan göra detta i en SQL-sats) och sedan skala om varje kolumn till detta när du väljer:

colSortPos = (colValue-colMean) / colStdev

Om du gör detta kommer du att få varje kolumn som sträcker sig runt 0 vilket +/- 1 standardavvikelse inom intervallet +/- 1. Tricket är då att kombinera dessa så att liknande datum är tillsammans. Problemet här är att detta inte är ett tvådimensionellt problem och därför måste du tänka multidimensionellt. Så mitt förslag är att ta det euklidiska avståndet som din sorteringsordning.

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

Det enda problemet med detta är att det projicerar ditt problem på ett endimensionellt utrymme som kan få dig att missa vissa korrelationer. För att komma runt detta föreslår jag att du använder en klustringsteknik som K-means som är ganska enkel att implementera och är riktigt snabb. Detta gör att du kan gruppera dina datum i k kluster som visar mest likhet [ http:// sv.wikipedia.org/wiki/K-means_clustering ]. Om du har rådata och vill leka med dessa (och andra) tekniker så föreslår jag att du provar weka-verktygslådan [ http://www.cs.waikato.ac.nz/ml/weka/ ] som låter dig leka med dessa tekniker.



  1. PHP-formulär infogas inte i mySQL-databasen

  2. Oracle skiljer inte mellan nollor och tomma strängar?

  3. Resurser för säkerhetskopiering av MySQL &MariaDB Databas

  4. Hur simulerar man UNPIVOT i Access?