2016-05-13 17 views
0

Ich muss einen Benutzer in eine Gruppe basierend auf Permutationen von 11 Fremdschlüsseln (1-11) sortieren.Sortierung basierend auf Permutationen einer bestimmten Größe

Ich habe einen big_table:

FK | User_ID   FK | User_ID 
1 | a     4 | c 
5 | a     1 | c 
3 | b     5 | c 
9 | b     11 | c 
7 | b     2 | c 
  • Gruppe 1 (G1) wird eine beliebige Permutation der Größe 2 (Benutzer A in diesem Beispiel)
  • G2 wird jede Permutation der Größe 3 (Benutzer umfassen b)
  • G3 wird eine beliebige Permutation der Größe 4 bis zur Größe 11 (user c)

die gültigen Permutationen wird in Separa gespeichert werden te Tabellen, eine Tabelle für alle Permutationen der Größe 2, eine andere für Permutationen der Größe 3 usw.

Wie kann ich überprüfen, ob ein Benutzer die Anforderungen erfüllt, um in eine Gruppe zu passen?

(Effizienz ist vorzuziehen, aber eine funktionierende Lösung ist das Ziel). Entschuldigung, ich habe keinen Code, aber ich bin neu genug für SQL, dass ich nicht weiß, wo ich mit diesem Problem anfangen soll.

EDIT: Es gibt andere Gruppen und mehr Fremdschlüssel, G1-G3 sind nur für FK 1-11 anwendbar.

Das Problem, das ich die meisten Schwierigkeiten habe, meinen Kopf herumzuwickeln, ist, wie man mehrere FKs mit einer einzelnen Permutation vergleicht. Zum Beispiel: Wie kann ich

1 | a and 3 | a 

auf eine Liste von gültigen Permutationen algorithmisch vergleichen?

+0

Nach welchen Ergebnissen suchen Sie? –

+0

@Ridiculon Sie wollen wirklich versuchen, zumindest einige Versuche zu zeigen, dies selbst zu lösen. Siehe [Wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und [mcve] – Tibrogargan

+0

Dies ist Teil eines viel größeren Problems, das ich festhalte, das ich entkleidet habe so viel wie möglich runter. Das ganze Problem betrifft mehr (und kompliziertere) Gruppen, aber ich weiß, wenn ich eine Antwort auf diesen Aspekt bekommen kann, kann ich es auf den Rest des Problems anwenden. Teil des Problems ist, dass ich nicht sehr viel über SQL jenseits von ddl-Aussagen weiß, ich suche jemanden, der mehr Erfahrung hat, um mich in die richtige Richtung zu zeigen. – Ridiculon

Antwort

0

Wenn Sie nur die Anzahl der Fremdschlüssel zählen wollen, verwenden Sie count(*) oder count(distinct):

select user_id, count(*) 
from big_table 
group by user_id; 

Dies wird die Anzahl der Fremdschlüssel für jeden Benutzer (sofern keine Duplikate in der Tabelle) geben.

+0

Ich hätte erwähnen sollen, dass die 1-11 Fremdschlüssel nicht die einzigen in der Spalte sind. Hinzufügen der ursprünglichen Frage – Ridiculon

Verwandte Themen