Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 BYkimenetként megjelölt vagy rendezéshez használt összes oszlopot. Az oszlopok nem lesznek automatikusan hozzáadva aGROUP BYzáradékhoz, ha már részei az összesítő függvénynek.Ha nem szeretné, hogy egy adott oszlop szerepeljen a
GROUP BYzá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
WHEREzá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
WHEREzá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
HAVINGzá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
WHEREzáradékban, vagy aHAVINGzáradékban, attól függően, hogyan használják őket a lekérdezés más részein.WHEREa 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 egyWHEREzáradékban, ha az nem része aGROUP BYzá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 BYzáradékban vagy összesítő függvényben használnak, a keresési feltétel megjelenhet akárWHEREzáradékként, akárHAVINGzá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
HAVINGzáradék részét kell képeznie.