2017-07-21 5 views
1

Ich habe eine Tabelle in Postgressql DB so.Äquivalent von Python's Map-Operator in Postgressql

ID, Name, scores. 
10, abc,{23,19,34} 
11, def, {2333,233,24} 
12, ghi, {321,34} 
13,hio,{} 

Punkte im obigen Datenmodell ist ein Array oder eine Liste von Zahlen.

Jetzt müssen wir alle Schüler finden, die eine einzelne Punktzahl haben, die 19 ist, wenn sie durch 10 geteilt wird. Wie kann ich das erreichen?

Ich habe das versucht, aber es funktioniert nicht.

SELECT * FROM students where 19 = ANY(scores)/10 

Irgendein Ding wie dieses funktioniert. Aber wir brauchen eine bessere Lösung (wahrscheinlich mit einem umgekehrten Index), da die Zeilen in der Größenordnung von Millionen liegen.

SELECT * FROM students where 190 <= ANY(scores) < 200 
+2

Was ist der Datentyp von Scores? –

+0

Scores ist eine Liste von Zahlen. – user4654

+0

Welcher Datentyp ist die Spalte "Scores" in Ihrer Datenbank? – yanman1234

Antwort

1

In Ihren Daten Beispiel gibt es keine Aufzeichnungen, die Ihren Zustand von einigem Wert erfüllen, wenn sie von 10 = 19 geteilt. Aber ich verstehe, dass Sie über Ihre Bedingung sicher sind, dass einzelne Zahl von Array, wenn durch 10 geteilt wird, gleich 19 sein sollte. Nicht Summe von allem oder von etwas?

Zuerst haben Sie Gin-Index auf Score-Spalte? Zweitens - wirklich einzelne Zahlen in Ihrem Score-Array wird größer sein als int Limit? Wenn nicht bigint wird nur Ihre Abfragen verlangsamen. Betrachten Bigint Problems und wenn Sie es haben, dann haben, sonst entfernen :: Bigint von Abfrage unter

SELECT * FROM students where 
scores&&array[190,191,192,193,194,195,196,197,198,199]::bigint 

Es ist hässlich, aber wahrscheinlich schneller als jegliche Versuche des Extrakts aller Zahl von Array zuerst sie dann durch 10 dividiert und dann Vergleich mit 19. Wenn Sie nur nach Zahlen für Zahlen suchen, die nach Teilung durch 10 gleich 19 sind, verwenden Sie einfach die Methode von Abelisto, aber es wird ein Killer während des Einfügens sein, da der Funktionsindex für Millionen von Zeilen und langen Arrays langsam ist .

Verwandte Themen