Megosztás a következőn keresztül:


Oszlopok használata összesítő lekérdezésekben (Visual Database Tools)

A következőkre vonatkozik:SQL Server

Összesített lekérdezések létrehozásakor a Lekérdezés- és nézettervezői eszközök (Visual Database Tools) bizonyos feltételezéseket feltételeznek, hogy az érvényes lekérdezést hozhasson létre. Ha például összesítő lekérdezést hoz létre, és kijelöl egy adatoszlopot megjelenítés céljára, a Lekérdezés- és Nézettervező automatikusan a GROUP BY záradék részévé teszi az oszlopot, így nem kísérli meg véletlenül megjeleníteni az egyes sorok tartalmát összegzéskor.

Csoportosítási szempont használata

A Lekérdezés- és nézettervező az alábbi irányelveket használja az oszlopok használatához:

  • Ha a Csoportosítás szempontja lehetőséget választja, vagy aggregátumfüggvényt ad hozzá egy lekérdezéshez, a rendszer automatikusan hozzáadja a záradékhoz a GROUP BY kimenetként megjelölt vagy rendezéshez használt összes oszlopot. Az oszlopok nem lesznek automatikusan hozzáadva a GROUP BY záradékhoz, ha már részei az összesítő függvénynek.

    Ha nem szeretné, hogy egy adott oszlop szerepeljen a GROUP BY záradékban, manuálisan módosítania kell a Feltétel panel Csoportosítás szerint oszlopában egy másik lehetőséget választva. A Lekérdezés- és nézettervező azonban nem akadályozza meg, hogy olyan beállítást válasszon, amely nem futtatható lekérdezést eredményezhet.

  • Ha manuálisan ad hozzá lekérdezési kimeneti oszlopot egy összesítő függvényhez a Feltételek vagy az SQL panelen, a Lekérdezés- és nézettervező nem távolít el automatikusan más kimeneti oszlopokat a lekérdezésből. Ezért el kell távolítania a fennmaradó oszlopokat a lekérdezés kimenetéből, vagy azokat a záradék vagy egy GROUP BY összesítő függvény részévé kell tennie.

Amikor keresési feltételt ad meg a Feltételek panel Szűrő oszlopába, a Lekérdezés és a Nézettervező a következő szabályokat követi:

  • Ha a rács Csoportosítás szerint oszlopa nem jelenik meg (mert még nem adott meg összesített lekérdezést), a keresési feltétel bekerül a WHERE záradékba.

  • Ha már szerepel az a(z) összesítő lekérdezésben, és a Where lehetőséget választotta a Group By oszlopban, a keresési feltétel a WHERE záradékban kerül elhelyezésre.

  • Ha a Csoportosítás oszlop a Where oszloptól eltérő értéket tartalmaz, a keresési feltétel a HAVING záradékban lesz elhelyezve.

A HAVING és a WHERE záradék használata

Az alábbi alapelvek azt írják le, hogyan hivatkozhat az összesítő lekérdezés oszlopaira keresési feltételek között. Általánosságban egy keresési feltétel oszlopával szűrheti az összesíteni kívánt sorokat (záradékot WHERE ), vagy meghatározhatja, hogy mely csoportosított eredmények jelenjenek meg a végső kimenetben (egy HAVING záradékban).

  • Az egyes adatoszlopok megjelenhetnek vagy a WHERE záradékban, vagy a HAVING záradékban, attól függően, hogyan használják őket a lekérdezés más részein.

  • WHERE a záradékok a sorok egy részhalmazának kiválasztására szolgálnak az összegzéshez és csoportosításhoz, és így a csoportosítás előtt alkalmazva lesznek. Ezért akkor is használhat adatoszlopot egy WHERE záradékban, ha az nem része a GROUP BY záradéknak, vagy egy összesítő függvényben található. Az alábbi utasítás például kiválasztja az összes olyan címet, amely 10,00 USD-nél többe kerül, és átlagozza az árat:

    SELECT AVG(price)
    FROM titles
    WHERE price > 10;
    
  • Ha olyan keresési feltételt hoz létre, amely egy oszlopot is tartalmaz, amelyet egy GROUP BY záradékban vagy összesítő függvényben használnak, a keresési feltétel megjelenhet akár WHERE záradékként, akár HAVING záradékként – a feltétel létrehozásakor Ön döntheti el, hogy melyiket kívánja használni. Az alábbi utasítás például az egyes kiadók címeinek átlagos árát hozza létre, majd megjeleníti azoknak a közzétevőknek az átlagát, amelyekben az átlagos ár meghaladja a 10,00 USD-t:

    SELECT pub_id,
           AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10);
    
  • Ha egy keresési feltételben aggregátumfüggvényt használ, a feltételnek összegzést kell tartalmaznia, ezért a HAVING záradék részét kell képeznie.