A számozás a sorok eljárásnak megfelelően megadott elsődleges kulcs értékei

Természetesen a sorokat kell számozni összhangban egy bizonyos sorrendben. Legyen ez a megbízás megadásakor az elsődleges kulcs oszlop, vagyis ahhoz a növelésével (vagy csökkentésével) értékeket, hogy az egyik oszlopban. Mert határozottságot, tegyük fel, hogy meg kell számozni modellt a termék asztalnál, ahol a modell számát csak az elsődleges kulcs. Az alapvető az, hogy elsődleges kulcs értéke nem tartalmazhat ismétlődő és NULL -értékbői ahol van elvileg lehetséges, hogy egyetlen, az összefüggés a modell számát és a sor száma az előre meghatározott sorrend modellek.

Nézzük először a következő lekérdezést:

SELECT P1.model, P2.model

AZ Termék P1 REGISZTRÁCIÓ

Termék P2 P1.model <= P2.model

Itt a kapcsolat létrejött két azonos táblázatok egyenlőtlenségek P1.model <= P2.model, в результате чего каждая модель из второй таблицы (P2.model) будет соединяться только с теми моделями из первой таблицы (P1.model), номера которых меньше или равны номеру этой модели. В результате получим, например, что модель с минимальным номером (1121) будет присутствовать во втором столбце результирующего набора только один раз, так как она меньше или равна только самой себе. На другом конце будет находиться модель с максимальным номером, так как любая модель будет меньше или равна ей. Следовательно, модель с максимальным номером будет сочетаться с каждой моделью, и число таких сочетаний будет равно общему числу моделей в таблице Product.

A fentiek alapján nyilvánvaló, hogy hányszor, hogy az egyes modellek találhatók a második oszlopban az eredmény meg lesz csak egy sorszám modell válogató modell növekvő sorrendben.

Így, hogy megoldja a problémát a számozás elég újraszámolja a modell a jobb oldali oszlopban, ami könnyen elvégezhető egy csoportot, és használja az aggregált függvény száma:

SELECT COUNT (*) nem, P2.model

AZ Termék P1 REGISZTRÁCIÓ

Termék P2 P1.model <= P2.model

GROUP BY P2.model

Felsorolni fordított sorrendben van ahhoz, hogy változtatni az egyenlőtlenség előjel.

Ha az adatbázis támogatja rangsor funkciót. A szám sort lehet elég egyszerű:

SELECT ROW_NUMBER () OVER (ORDER BY modell) nem, a modell

funkció ROW_NUMBER

A ROW_NUMBER funkció, mint a neve is mutatja, a számok a visszaadott sorok a lekérdezés. Akkor tudja használni, hogy végre bonyolultabb rendelési sorok a jelentésben, mint az, hogy megadja az ORDER BY záradékot az SQL-92 szabvány.

Eljövetele előtt ezt a funkciót szám által visszaadott sorok egy lekérdezést, szükséges volt, hogy egy meglehetősen összetett algoritmus ösztönösen érthetetlen. Az egyetlen előnye ennek algoritmus, hogy ez működni fog szinte minden adatbázist, amely támogatja az SQL-92 szabvány.

Segítségével ROW_NUMBER funkció, akkor:

számozást beállítva, hogy különbözik az, hogy a rendezési sorban az eredmény meg;

hogy hozzon létre egy „nem-through” számozás, azaz allokáljuk az összes csoport a sorokból, és számlálni őket külön-külön minden egyes csoport;

használja odnovmerenno számozás többféleképpen, as, sőt, a számozás nem függ a fajta lekérdezés húrok.

A lehető legegyszerűbben ROW_NUMBER funkció mutatni egyszerű példát, amelyre most viszont.

1. példa: Number összes járat a Trip táblázat szerinti sorrendben számukat. Rendezés.

SELECT ROW_NUMBER () felett (ORDER BY trip_no) num,

AHOL ID_comp <3

ORDER BY id_comp, trip_no

Bid OVER, amelyet ROW_NUMBER funkció meghatározza a sorrendben sorszámok. Ez használ egy mondatot, ORDER BY, amely nincs kapcsolatban a sorrendben O kérés vonalak

És ha azt szeretnénk, hogy megszámlálja a járatok az egyes vállalatok külön-külön? Ehhez szükségünk van egy másik szerkezet a OVER kikötés - partíciót.

Szerkezet partíció határozza vonalak olyan csoportjára, amelyek a független számozás. Csoport határozza meg az értékeket az oszlop listában felsorolt ​​ezt a struktúrát, a sorok alkotó csoport.

2. példa: száma a járatok az egyes vállalatok külön-külön a növekvő sorrendjében a járatszámot.

SELECT ROW_NUMBER () felett (partíciót id_comp ORDER BY id_comp, trip_no) num,

AHOL ID_comp <3

ORDER BY id_comp, trip_no

Partíciót id_comp azt jelenti, hogy a járatok minden csoportot alkotnak, és amely rendelkezik önálló számozást.

Hiánya szerkezete partíció, mint az első példában BYO, azt jelenti, hogy a kapott készlet minden vonalak alkotnak egy csoportot.

A letöltés folytatásához össze kell rakni egy képet: