2016-07-15 12 views
2

ich eine SQLite db haben, sieht wie folgt aus:SQLite - Wählen Sie Reihen von verschiedenen Kombinationen von Spalten

  • alle Spalten
  • die Anzahl der:

    id | num1 | num2 | value 
    ---|------|------|------ 
    1 | 2 | 1 | "foo" 
    2 | 1 | 1 | "foo" 
    3 | 2 | 4 | "foo" 
    4 | 2 | 3 | "foo" 
    5 | 1 | 1 | "foo" 
    6 | 1 | 1 | "foo" 
    7 | 1 | 3 | "foo" 
    8 | 1 | 2 | "foo" 
    

    ich folgendes auswählen müssen verschiedene Kombinationen von num1 und num2

  • die num1/num2 Kombinationen Rangliste d von num1 und dann num2

Die resultierende Tabelle sollte wie folgt aussehen:

id | num1 | num2 | value | num | rank 
---|------|------|-------|-----|----- 
1 | 2 | 1 | "foo" | 6 | 4 
2 | 1 | 1 | "foo" | 6 | 1 
3 | 2 | 4 | "foo" | 6 | 6 
4 | 2 | 3 | "foo" | 6 | 5 
5 | 1 | 1 | "foo" | 6 | 1 
6 | 1 | 1 | "foo" | 6 | 1 
7 | 1 | 3 | "foo" | 6 | 3 
8 | 1 | 2 | "foo" | 6 | 2 

Ich versuchte fiddeling um mit vielen verschiedenen Unterabfragen, aber nicht alles in der Nähe zu einem brauchbaren Ergebnis.


EDIT: Ich schaffte es, die Anzahl der Kombinationen zu erhalten (so Spalte num) mithilfe der folgenden Abfrage:

SELECT 
*, 
(
SELECT count (*) 
FROM (SELECT DISTINCT num1, num2 
FROM table) 
) 
AS num 
FROM table; 

Antwort

1

Der Rang kann durch Zählen der unterschiedlichen Zeilen berechnet werden, die gleich oder kleiner als die aktuelle Reihe. Eine Zeile ist kleiner, wenn num1 kleiner ist, oder wenn num1 gleich ist und num2 kleiner ist.

..., 
(SELECT COUNT(*) 
FROM (SELECT DISTINCT num1, num2 
     FROM MyTable) AS T2 
WHERE T2.num1 < MyTable.num1 
    OR (T2.num1 = MyTable.num1 AND 
     T2.num2 <= MyTable.num2) 
) AS num, 
... 
Verwandte Themen