Seznamte se s daty, která máte:
První klíčovou věcí je pochopit, jaká data máte. Zde v tomto případě máte čtyři stoly
- Pojišťovací společnosti
- Pacient
- Lékaři
- Návštěvy
Váš cíl:
Najděte seznam všech pacientů, kteří navštívili všechny ortopedy (odbornost) sdružené v jejich pojišťovnách.
Udělejme krok zpět a analyzujme to po menších částech:
Obecně mohou být požadavky trochu ohromující, když se na ně podíváte jako celek. Rozdělme požadavky na menší součásti, abychom pochopili, co musíte udělat.
- Část a: Musíte najít seznam lékařů, jejichž specializací je 'Ortoped'
- Část b: Najděte seznam pacientů, kteří navštívili lékaře uvedené v #1.
- Část c: Filtrujte výsledek č. 2 a najděte seznam pacientů a lékařů, kteří sdílejí stejnou pojišťovnu.
- Část d: Zjistěte, že pacienti, kteří navštívili každého z těchto ortopedů kteří patří ke stejné pojišťovně jako pacient.
Jak přistupovat:
-
Musíte určit svůj hlavní cíl, zde v tomto případě určit seznam pacientů. Nejprve se tedy zeptejte na tabulku pacientů.
-
Máte pacienty, vlastně všechny, ale musíme zjistit, kteří z těchto pacientů navštívili lékaře. Netrapme se tím, zda je lékař ortoped nebo ne. Potřebujeme pouze seznam pacientů a lékařů, které navštívili. Mezi tabulkou Pacient a Doktor neexistuje žádné mapování. Chcete-li tyto informace zjistit,
Připojte se k tabulce Pacient s tabulkou Návštěvy ve správném poli klíče.
Potom spojte výstup s tabulkou Lékaři ve správném poli klíče.
-
Pokud jste se připojili správně, měli byste nyní mít seznam všech pacientů a lékařů, které navštívili. Pokud jste použili
LEFT OUTER JOIN
, najdete i pacienty, kteří nikdy lékaře nenavštívili. Pokud jste použiliRIGHT OUTER JOIN
, najdete pouze pacienty, kteří navštívili lékaře. -
Nyní máte všechny pacienty a lékaře, které navštívili. Požadavkem však je najít pouze lékaře, kteří jsou ortopedy . Aplikujte tedy podmínku pro filtrování výsledku, abyste získali pouze požadovaný výsledek.
-
Nyní jste splnili požadavky rozdělené na menší součásti v části a a část b . Musíte to ještě filtrovat podle pojišťoven. Zde je ošemetná část, požadavek neříká, že musíte zobrazit pojišťovnu, takže nemusíme používat tabulku Pojišťovny. Vaše další otázka bude
'How am I going to filter the results?'
. Platný bod. Zjistěte, zda některá ze tří tabulekPatient
,Doctor
aVisits
obsahovat informace o pojišťovně.Patient
aDoctors
mají společné pole. Připojte se k tomuto společnému poli a filtrujte výsledek. -
Najděte počet jedinečných ortopedů kterou každý pacient navštívil.
-
Zde je část, kterou lze provést mnoha způsoby, jedním ze způsobů, jak toho dosáhnout, by bylo přidat dílčí dotaz, který by byl vaším čtvrtým sloupcem ve výstupu. Tento dílčí dotaz by se dotazoval na tabulku Lékaři a filtroval by podle specializace ='Ortoped'. Kromě tohoto filtru musíte také filtrovat porovnáním pojišťovny ve vnitřní tabulce s ID pojišťovny v tabulce Pacienti, která je v hlavním dotazu. Tento dílčí dotaz vrátí počet všech ortopedů na ID pojišťovny, které odpovídá údajům pacienta.
-
Nyní byste měli mít pole
patient id
,patient name
,patients visits count
atotal number of Orthopedists in same insurance company
z dílčího dotazu. Poté můžete přidat vnější spojení, které bude filtrovat výsledky z této odvozené tabulky v polích, kde sepatients visits count
odpovídátotal number of Orthopedists in same insurance company
. Neříkám, že je to nejlepší přístup. To je jeden přístup, který mě napadá. -
Pokud se budete řídit výše uvedenou logikou, měli byste to mít.
Seznam pacientů, kteří navštívili všechny lékaře
Filtrováno pouze lékaři, kteří jsou ortopedy
Filtrováno podle pacientů a lékařů, kteří sdílejí stejné informace pojišťovny.
Celý výstup je pak opět filtrován podle dvou polí počtu nalezených uvnitř odvozeného tabulkového výstupu.
Míč je na vaší straně:
- Vyzkoušejte to krok za krokem a jakmile najdete odpověď. Zveřejněte to zde jako samostatnou odpověď. Budu hlasovat pro, abych kompenzoval všechny záporné hlasy, které jste u této otázky dostali.
Jsem přesvědčen, že to snadno zvládnete.
Pokud klopýtnete...
Neváhejte zveřejnit své otázky jako comments to this answer
, Ostatní a já vám rádi pomůžeme.
Odmítnutí odpovědnosti
Poskytl jsem jeden z mnoha způsobů, jak lze tuto logiku implementovat. Jsem si jistý, že existuje mnoho způsobů, jak to implementovat mnohem lépe.
Výsledek:
Správný dotaz, který produkuje požadovaný výstup, najdete v odpovědi @Ofek Ron. Nepsal jsem žádnou část dotazu. Všechno to bylo úsilí OP.