Kezdőoldal » Számítástechnika » Egyéb kérdések » Adatbáziskezelésnél, SQL-ben...

Adatbáziskezelésnél, SQL-ben count függvény használatakor mikor kell * és mikor egy konkrét érték a zárójelen belül?

Figyelt kérdés

Olyasmit hallottam, hogy a count(*) "mindent" számol a megadott feltételeknek megfelelőn, de honnan tudom eldönteni, hogy mikor kell egy konkrét értéket pl. count(valami) beleírni? Mert ilyenkor a "valami"-ket számolja, de sokszor működik akkor is, ha a "valami" helyére *-ot írok, vagy fordítva.

Ha több dolog tartozik hozzá akkor kell a *, vagy hogy van ez pontosan?



2015. máj. 11. 18:48
 1/5 anonim ***** válasza:

Én SQL-ezek már több mint 3 éve, de még 1x se kellet használnom a COUNT(NÉV) alakot. Világéletemben csillagoztam.


A "mindent" számol nem pontos kifejezés. Hanem a táblában lévő sorok db számát adja.


Most csak feltételezem (szóval nem tudom pontosan), hogy a NULL mezőket nem számolja bele, ha annak az oszlop nevével hívod meg. Persze ehhez szükséges, hogy a tábla definícióban a "NOT NULL" ne szerepeljen.

2015. máj. 11. 20:00
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

Jól látod, pontosan ez a különbség! Például az egyik érettségi megoldókulcsban egyszer egy ilyen count(*)-os megoldást adtak, ahol a következő lépés a nem null értékekre való szűrés volt abban a mezőben külön pontért, holott ha azt a mezőt számolják össze a counttal, akkor egy lépésben kijön az eredmény.


Emellett sebességbeli különbségek is lehetnek, de az egyik SQL-nél ebbe az irányba, a másiknál pont fordítva, erre a konkrét nyelvjárás alapján lehet guglizni.

2015. máj. 12. 07:55
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

+ még egy szolgáltatása a konkrét mező megnevezésének: lehetőséget ad COUNT(DISTINCT mezőnév) használatára: szűrés a csak egymástól különböző előfordulásokra (ismétlődésektől való eltekintés kérése).


Szóval éppen tegnap egy feladat során azt tapasztaltam, hogy ha mezőnevet adok meg, akkor még arra is van lehetőségem ezáltal, hogy arra a mezőnévre nézve csak a különböző értékeket számolja össze, az ismétlődéseket ne

COUNT(DISTINCT itemtype).


Nagyméretű legacy kódot örököltünk, és időnk is kevés volt, ezért egy feltehetőleg csúnya megoldást kellett alkalmaznunk. Kétféle szempont szerint joinoltunk árucikkekhez hozzátartozó szempontokat:

- vásárlókat,

- illetve díjcsomagokat,

és mind a kettőről kellett kimutatás is:

- vásárlók vonatkozásában pedig az adott árucikkhez tartozó vásárlószám, hogyúgymondjam ,,népszerűség'', ,,kelendőség'').

- a díjcsomagok esetében pedig a cikkhez tartozó minimáldíjcsomag ára,


Csúnyán csináltuk meg a dolgot, egyszerűen mind a két szempontot külön-külön hozzájoinoltuk a főtáblához. Ilyenkor ,,összeszorzódnak'' a két-két join által adott lehetőségek, az összes lehetséges variáció szerint. COUNT(*) vagy COUNT(customer.id) nem az adott cikkhez tartozó vásárlók számát, hanem az adott cikkhez tartozó vásárlók számának és szintén az adott cikkhez tartozó a díjcsomagok számának a **szorzatát** adja (ez természetes, hiszen két független egy-sok asszociációt húz be a két join). A COUNT(DISTINCT customer.id) viszont még ilyen kifogásolható megoldás esetén is a vásárók adott árucikkre vonatkozó valódi számát adja, ez figyel arra, hogy az ismétlődő mezőelőfordulásokat figyelmen kívül hagyja.


Ez persze valószínűleg visszaélésszerű használata volt a COUNT(DISTINCT mezőnév)-nek, a problémát alapos újratervezéssel kellett volna megoldanunk, de ezt csak példaként írtam, lehet a COUNT(DISTINCT mezőnév)-nek olyan használata is, ahol tényleg az a tömör és szép megoldás.

2015. aug. 20. 10:26
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

Ennek továbbgondolása az,hogy akár származtatott értékeket is be lehet írni, ez főleg akkor hasznos, ha feltételes összeszámlálást akar az ember:

[link]

2015. aug. 20. 11:00
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

"lehet a COUNT(DISTINCT mezőnév)-nek olyan használata is, ahol tényleg az a tömör és szép megoldás"


Elég sokszor használtam már alkalmi interaktív lekérdezésekben, egyszerűen ez volt kézenfekvő.

2015. aug. 20. 11:40
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!