Zapoznaj się z posiadanymi danymi:
Pierwszą kluczową rzeczą jest zrozumienie, jakie masz dane. W tym przypadku masz cztery stoły
- Firmy ubezpieczeniowe
- Pacjent
- Lekarze
- Odwiedziny
Twój cel:
Znajdź listę wszystkich pacjentów, którzy odwiedzili wszystkich ortopedów (specjalność) powiązanych z ich towarzystwami ubezpieczeniowymi.
Zróbmy krok wstecz i przeanalizujmy to w mniejszych kawałkach:
Ogólnie rzecz biorąc, wymagania mogą być nieco przytłaczające, gdy spojrzysz na nie w całości. Podzielmy wymagania na mniejsze komponenty, aby zrozumieć, co musisz zrobić.
- Część a: Musisz znaleźć listę lekarzy, których specjalnością jest „Ortopeda”
- Część b: Znajdź listę pacjentów, którzy odwiedzili lekarzy wskazanych w punkcie 1.
- Część c: Przefiltruj wynik nr 2, aby znaleźć listę pacjentów i lekarzy, którzy korzystają z tej samej firmy ubezpieczeniowej.
- Część d: Dowiedz się, że pacjenci, którzy odwiedzili każdego z tych ortopedów którzy należą do tej samej firmy ubezpieczeniowej co pacjent.
Jak podejść:
-
Musisz określić swój główny cel, w tym przypadku zidentyfikować listę pacjentów. Dlatego najpierw odpytaj tabelę Pacjent.
-
Masz pacjentów, właściwie wszystkich, ale musimy dowiedzieć się, który z tych pacjentów odwiedził lekarzy. Nie przejmujmy się tym, czy lekarz jest ortopedą, czy nie. Potrzebujemy tylko listy pacjentów i lekarzy, których odwiedzili. Nie ma mapowania między tabelą Pacjent i Lekarze. Aby uzyskać te informacje,
Dołącz do tabeli Pacjent z tabelą Wizyty w odpowiednim polu kluczowym.
Następnie połącz wyniki z tabelą Lekarze w odpowiednim polu klucza.
-
Jeśli poprawnie wykonałeś połączenie, powinieneś mieć teraz listę wszystkich pacjentów i lekarzy, których odwiedzili. Jeśli użyłeś
LEFT OUTER JOIN
, znajdziesz nawet pacjentów, którzy nigdy nie byli u lekarza. Jeśli użyłeśRIGHT OUTER JOIN
, znajdziesz tylko tych pacjentów, którzy odwiedzili lekarza. -
Teraz masz wszystkich pacjentów i lekarzy, których odwiedzili. Wymagane jest jednak znalezienie tylko lekarzy, którzy są ortopedami . Tak więc zastosuj warunek, aby odfiltrować wynik, aby uzyskać tylko żądany wynik.
-
Udało Ci się spełnić wymagania podzielone na mniejsze komponenty w części a i część b . Nadal musisz to filtrować przez firmy ubezpieczeniowe. Oto trudna część, wymóg nie mówi, że musisz wyświetlić firmę ubezpieczeniową, więc nie musimy korzystać z tabeli InsuranceCompanies. Twoje następne pytanie będzie
'How am I going to filter the results?'
. Prawidłowy punkt. Dowiedz się, czy którakolwiek z trzech tabelPatient
,Doctor
iVisits
zawierać informacje o firmie ubezpieczeniowej.Patient
iDoctors
mają wspólne pole. Dołącz do tego wspólnego pola, aby filtrować wyniki. -
Znajdź liczbę unikalnych ortopedów którą odwiedził każdy pacjent.
-
Oto część, którą można wykonać na wiele sposobów, jednym ze sposobów na zrobienie tego byłoby dodanie zapytania podrzędnego, które byłoby twoją czwartą kolumną w danych wyjściowych. To zapytanie podrzędne spowoduje zapytanie do tabeli Lekarze i filtrowanie według specjalizacji =„Ortopeda”. Oprócz tego filtru należy również filtrować, dopasowując firmę ubezpieczeniową w tabeli wewnętrznej do identyfikatora firmy ubezpieczeniowej w tabeli Pacjenci, która znajduje się w głównym zapytaniu. To podzapytanie zwróci liczbę wszystkich ortopedów dla identyfikatora firmy ubezpieczeniowej, który pasuje do danych pacjenta.
-
Powinieneś teraz mieć pola
patient id
,patient name
,patients visits count
oraztotal number of Orthopedists in same insurance company
z podzapytania. Następnie możesz dodać sprzężenie zewnętrzne, które będzie filtrować wyniki z tej tabeli pochodnej na polach, w którychpatients visits count
pasuje dototal number of Orthopedists in same insurance company
. Nie mówię, że to najlepsze podejście. To jest jedno podejście, które przychodzi mi do głowy. -
Jeśli postępujesz zgodnie z powyższą logiką, powinieneś to mieć.
Lista pacjentów, którzy odwiedzili wszystkich lekarzy
Filtrowane tylko przez lekarzy, którzy są ortopedami
Filtrowane według pacjentów i lekarzy dzielących się tymi samymi informacjami o firmie ubezpieczeniowej.
Ponownie, cały wynik jest następnie filtrowany przez dwa pola licznika znajdujące się w danych wyjściowych tabeli pochodnej.
Piłka jest na twoim boisku:
- Wypróbuj krok po kroku, a gdy znajdziesz odpowiedź. Opublikuj to tutaj jako osobną odpowiedź. Poproszę go, aby zrekompensować wszystkie negatywne głosy, które otrzymałeś w tym pytaniu.
Jestem przekonany, że możesz to zrobić z łatwością.
Jeśli się potkniesz...
Nie wahaj się publikować swoich pytań jako comments to this answer
, Inni i chętnie Ci pomożemy.
Zastrzeżenie
Przedstawiłem jeden z wielu sposobów implementacji tej logiki. Jestem pewien, że istnieje wiele sposobów na wdrożenie tego w znacznie lepszy sposób.
Wynik:
Proszę zapoznać się z odpowiedzią @Ofek Ron, aby uzyskać prawidłowe zapytanie, które daje pożądany wynik. Nie napisałem żadnej części zapytania. To wszystko było wysiłkiem OP.