Hogyan lehet ellenőrizni az alapvető ismereteket sql, Elwood - s blog

A minap, gondoltam egy probléma, ami a kezembe került a munkát egy év és egy fél ezelőtt.
Abban az időben nem tudni sql-ex.ru és tudásom SQL már elég gyenge, szinten
Kiválsazthat egyszerű belső join'ami. És emlékszem, amikor nem tudtam megoldani ezt a problémát anélkül,
további segédlekérdezés. Most, miután néhány tíz megoldott problémák sql-ex.ru I
nem volt probléma vele elsajátította, hogy elvezetett azt hinni, hogy ez - egy jó teszt a tudás
SQL alapjai. Ezzel szemben a bonyolultabb feladatok, ez a feladat nem igényel sok időt, de
Ez magában foglalja a szinte mindent, ami szükséges az átlagos programozó kiadni SQL tudás, különösen, ha azt megoldani, hogy a szem előtt. Azonnal eltűnnek kérdésekre, mint „Mi JOIN, LEFT JOIN mint különbözik egy inner join, hogy a csoportosulás”, és így tovább.

Így a megfogalmazás a következőképpen. Vannak 2 asztal - Gyűjtemény és pont.

Hogyan lehet ellenőrizni az alapvető ismereteket sql, Elwood - s blog

Szükséges, hogy a kiválasztás
Collection.ID Collection.Name Collection.Count
e gyűjtemények, amelyek kevesebb, mint 5 elem.
Ez minden.

Az algoritmus a probléma megoldására.
Nos, nyilvánvalóan ugyanaz - szükség van, hogy a JOIN, ne JOIN, csoportos őket Collection.ID, levezetni az ID, név, Count (*).
A fenébe. Csoportosítása során az azonosító nem lehet levezetni neve. Ezért, szükség van vagy hogy lezárja a kapott mintát egy még 1 lekérdezés vagy csatolja csoportosításának Név. Ok, ez működik. Csak üres gyűjtemény nem jelenik meg. Hogy miért. Nos, nyilvánvalóan ugyanaz - nem esnek az eredmény BELSŐ JOIN'a szükséges használni a bal csatlakozni. Ó, most megfordult. Csak a gyűjtemény egy üres, és count (*) megjeleníti a nulla helyett. Ja, ez egy LEFT JOIN, aki csatlakozik Collection.ID Collection.Name NULL NULL és count (*) ad a készülék. Hogyan javíts valamit. Kivonni 1 nem lehet, mert akkor csavarja fel, így nem üres gyűjtemény. Meg kell valahogy ellenőrizni, hogy a gyűjtemény üres, és a kimenet 0, és a többi is - count (*). Igen, ugyanolyan joguk van a NULL, akkor lehet bármilyen összesítő függvényt, hogy álljon, és összehasonlítottuk a NULL'om. Ha egy NULL, akkor egy üres gyűjtemény, és kimenetek 0, egyébként rá - count (*). Eureka! Nos, adjunk hozzá megszerezni. Írja kérése:

SELECT c.ID, c.Name, eset, amikor count (*) = 1 és Max (i.CollectionID) NULL, akkor 0 ELSE count (*) véget Collection c LEFT JOIN pont i ON c.ID = i.CollectionID GROUP BY c.ID, c.Name RENDELKEZŐ count (*) <5