Jak pobrać ilość wystąpień par liczb

0

Witajcie,

Mam tabelę z kolumnami l1,...l6 typu numeric. Udało mi się przygotować zapytanie, które wyciąga ilość wystąpień danej liczby na w dowolnej kolumnie dla dowolnego wiersza. Przykład tutaj:
http://sqlfiddle.com/#!15/f1acc/2

Teraz potrzebowałbym przygotować coś jak v_tempNumbersCountPar dla par liczb np 8 i 15. Udało mi się coś takiego zrobić przekazując parametr w postaci stringa : '8,15' konwertując go na array i przekazując jako parametr do zapytania jednak chciałbym to zrobić bezparametrowo czyli to co mam teraz tylko nie dla pojedynczej liczby tylko par. W przykładzie powyżej pary: {8,15}, {8,3} i {15,3} wystąpią 2 razy. Innych par nie ma więc zapytanie powinno zwrócić tylko 3 rekordy.

Od razu wspomnę, że na kilka sposobów udało mi się to zrobić ale zapytanie było tak nieoptymalne, że dostawałem wyjątek o przekroczonym czasie połączenia.

2

Spróbuj tak:

create materialized view vm_tempNumbersCount as select * from v_tempNumbersCount with data;

create index id1 on vm_tempNumbersCount (id, liczby);

A potem to już prosto:

select v1.liczby, v2.liczby, count(*) from vm_tempNumbersCount v1 join vm_tempNumbersCount v2 on v1.id=v2.id and v1.liczby>v2.liczby group by 1,2 having count(*)>1 order by 3, 1, 2
0

@Marcin.Miga: Zapomniałem o widokach zmaterializowanych ... niestety trochę się nakombinowałem aby zrobić "upgrade" z 9.1 do 9.4 ale dzięki temu przynajmniej mam nowszą wersję postgresa i rozwiązany problem. Wydajnościowo póki co jest nieźle także wielkie dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1