sql >> Database >  >> RDS >> Mysql

Integer-volgorde met meerdere kolommen

Het probleem dat je lijkt te hebben, is dat elke kolom een ​​andere schaal heeft en je ze dus niet gemakkelijk kunt combineren. Dit probleem kan worden opgelost met een techniek die whitening wordt genoemd. Dit omvat het berekenen van het gemiddelde en de standaarddeviatie van elke kolom (u zou dit in 1 SQL-instructie kunnen doen) en vervolgens elke kolom hiernaartoe herschalen bij het selecteren van:

colSortPos = (colValue-colMean) / colStdev

Als je dit doet, krijg je elke kolom met een bereik van rond de 0, wat +/- 1 standaarddeviatie binnen het bereik van +/- 1 is. De truc is dan om deze te combineren zodat vergelijkbare datums bij elkaar komen. Het probleem hier is dat dit geen tweedimensionaal probleem is en dat je dus multidimensionaal moet denken. Dus mijn suggestie is om de Euclidische afstand als sorteervolgorde te nemen.

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

Het enige probleem hiermee is dat het je probleem projecteert op een 1-dimensionale ruimte waardoor je misschien wat correlaties mist. Om dit te omzeilen, raad ik aan een clustertechniek zoals K-means te gebruiken, die vrij eenvoudig te implementeren is en erg snel is. Hiermee kunt u uw datums groeperen in k-clusters die de meeste overeenkomst vertonen [ http:// en.wikipedia.org/wiki/K-means_clustering ]. Als je over de onbewerkte gegevens beschikt en met deze (en andere) technieken wilt spelen, raad ik je aan de weka-toolkit [ http://www.cs.waikato.ac.nz/ml/weka/ ] waarmee je met deze technieken kunt spelen.



  1. Hoe queryresultaten voor oneindig scrollen te pagineren?

  2. Databaseontwerp voor meertalige toepassingen

  3. Op diepte gebaseerde boom genereren uit hiërarchische gegevens in MySQL (geen CTE's)

  4. Django models.py circulaire externe sleutel