Witam ponownie,
Od kilku dni próbuję rozwiązać następujące zagadnienie:
Dane:
Dane wstępnie obrobione tzn. tak aby łatwiej było wytłumaczyć.
Zadanie:
Znaleźć zakupy (ID definiuje zakup), które są podobne do siebie. Czy też znaleźć pary ID, które mają ze sobą coś wspólnego.
Najprościej jest odnaleźć takie same, czyli w załączonym przykładzie ID 1 = ID 4 nieco trudniej stwierdzić, że np. ID 6 ma sporo wspólnego z ID 7 różnią się tylko o 4 Gruszki lub ID 3 od ID 4 różnią się o jedno jabłko.
Właśnie nad zrealizowaniem części drugiej (po nieco trudniej) główkuję i jak na razie z mizernym rezultatem?
Gdyby któryś z Forumowiczów mógł skierować Mnie na nowe tory myślenia, będę zobowiązany.
Pozdrawiam Morf
Skoro interesują nas wszystkie możliwe pary rekordów to w najgorszym przypadku będziemy mieć iloczyn kartezjanski przy self-joinie, ale możemy to nieco uprościć. Zakładając, że dwa rekordy są podobne jeżeli dla tego samego owocu mają taką samą ilość, to możemy dodać to jako warunek złączenia. W ten sposób pomijamy wszystkie pary, które nie mają ze sobą nic wspólnego a także dostajemy dane w formacie dość wygodnym do pogrupowania, bo wystarczy w każdej grupie dla identycznych par ID policzyć rekordy i otrzymujemy liczbę zgodnych pozycji zakupów. Czyli:
SELECT z1.ID AS ID1, z2.ID AS ID2, COUNT(*) AS podobienstwo FROM zakupy z1 JOIN zakupy z2 ON z1.ID < z2.ID AND z1.Owoc = z2.Owoc AND z1.Ilosc = z2.Ilosc GROUP BY z1.ID, z2.ID ORDER BY podobienstwo DESC, z1.ID, z2.ID
Kolego Pmir13 Wielkie Dzięki.
Jak dla mnie Mistrzostwo Świata, na to bym nie wpadł.
SELECT ID,ID2,podobienstwo,Ilosc,podobienstwo*100/Ilosc AS Procent FROM (SELECT Tab1.ID AS ID,ID2,podobienstwo, COUNT(Owoc) AS Ilosc FROM [Testowa_SQL_Nauka].[dbo].[Owoce] AS Tab1 JOIN (SELECT z1.ID AS ID1, z2.ID AS ID2, COUNT(*) AS podobienstwo FROM [Testowa_SQL_Nauka].[dbo].[Owoce] AS z1 JOIN [Testowa_SQL_Nauka].[dbo].[Owoce] AS z2 ON z1.ID < z2.ID AND z1.Owoc = z2.Owoc AND z1.Ilosc = z2.Ilosc GROUP BY z1.ID, z2.ID ) AS Tab2 ON Tab1.ID = Tab2.ID1 GROUP BY Tab1.ID,ID1,ID2,podobienstwo) AS Tab3 ORDER BY Procent DESC,Tab3.ID;
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)