Kurse › Vendime të bazuara në të dhëna: nga pyetja te përgjigjja

Pyetja juaj e parë e vërtetë mbi porositë e Alpenkorb-it

Mësimi 5 nga 8 · 13 min

Forma e çdo pyetjeje

Keni ekzekutuar pyetje të vogla në katër laboratorët e parë. Ky mësim i vë pjesët në rregull, sepse pothuajse çdo pyetje analize ka të njëjtin skelet.

Text
SELECT   columns or calculations
FROM     table
WHERE    conditions on rows
ORDER BY sort columns
LIMIT    number of rows;

SQL i ekzekuton klauzolat në një rend të ndryshëm nga ai në të cilin i shkruani. Së pari FROM zgjedh tabelën, pastaj WHERE heq rreshtat, pastaj SELECT llogarit kolonat, pastaj ORDER BY renditet dhe LIMIT pret. Kjo është arsyeja pse WHERE nuk mund të filtrojë sipas një emri që krijoni në SELECT, ndërsa ORDER BY mund të rendisë sipas tij.

Filtra që i përshtaten biznesit

Lena dëshiron të dijë nëse kodet e zbritjes blejnë shporta më të mëdha. Në tabelën orders, discount_code mban kode të tilla si WELCOME10 për porosinë e parë ose AFFILIATE15 nga faqet partnere, dhe është bosh kur nuk është përdorur asnjë kod. Në SQL, një vlerë bosh është NULL, çka do të thotë e panjohur, dhe kërkon testin e vet.

SQL
SELECT order_id, order_date, source, discount_code, net_amount
FROM orders
WHERE status = 'delivered'
  AND discount_code IS NOT NULL
  AND order_date >= '2026-01-01'
ORDER BY net_amount DESC
LIMIT 3;

discount_code = NULL nuk do të kthente asnjë rresht. Krahasimi i çfarëdo gjëje me të panjohurën jep të panjohur, dhe WHERE mban vetëm rreshtat ku kushti është i vërtetë. Përdorni në vend të kësaj IS NULL dhe IS NOT NULL.

  • AND kërkon çdo kusht, OR të paktën një. Kur i përzieni, shtoni kllapa: WHERE status = 'delivered' AND (region = 'Bern' OR region = 'Basel').
  • IN është një formë e shkurtër për disa OR: region IN ('Bern', 'Basel').
  • Krahasimet e tekstit kërkojnë thonjëza të vetme dhe shkrimin e saktë. Rajonet shkruhen 'Zurich', 'Geneva' dhe 'St. Gallen'.

Tri gabime të vogla shkaktojnë shumicën e pyetjeve të para të dështuara. Vlerat e tekstit përdorin thonjëza të vetme: në DuckDB, "delivered" në thonjëza të dyfishta do të thotë një kolonë me emrin delivered, dhe pyetja dështon. Datat shkruhen si tekst në formën ISO, '2026-01-01', të cilën DuckDB e krahason saktë me një kolonë të tipit datë. Dhe një presje që mungon ose është e tepërt mes kolonave prodhon një gabim sintakse pranë fjalës tjetër.

Kurthi i statusit

Tabela orders përmban çdo porosi të bërë ndonjëherë, duke përfshirë 67 të anuluara dhe 80 të kthyera. net_amount i tyre është ende i plotësuar, sepse shuma dihej kur u bë porosia. Nëse harroni status = 'delivered', të ardhurat janë tepër të larta. Në tremujorin e parë të 2026-s, ky gabim e kthen CHF 37'107.20 në CHF 38'787.67. Gabimi nuk shpërndahet as në mënyrë të njëtrajtshme: anulimet dhe kthimet janë më të shpeshta te disa burime sesa te të tjerat.

Çfarë tregoi pyetja e zbritjes? Në tremujorin e parë të 2026-s, 90 nga 648 porositë e dërguara përdorën një kod. Vlera e tyre mesatare ishte CHF 57.16, kundrejt CHF 57.28 për porositë pa kod. Sipas kësaj dëshmie, kodet nuk blejnë shporta më të mëdha. Ato mund të fitojnë ende klientë të rinj, çka është një pyetje tjetër dhe kërkon një pyetje SQL tjetër. Para se t'i besoni ndonjë rezultati, krahasoni numrin e rreshtave të tij me një shifër që tashmë e dini: laboratori në mësimin 2 ktheu 648 porosi të dërguara për këtë tremujor, kështu që një filtër për të njëjtin tremujor nuk mund të kthejë kurrë më shumë.

💡 Ndërtojeni pyetjen hap pas hapi. Filloni me SELECT * FROM orders LIMIT 10, shtoni një filtër, ekzekutojeni, kontrolloni numrin e rreshtave, pastaj shtoni tjetrin. Një pyetje e gjatë e shkruar menjëherë dhe e ekzekutuar një herë i fsheh gabimet e veta.
Kontroll i njohurive
Pse WHERE discount_code = NULL nuk kthen asnjë rresht?

Hyrje për të përgjigjur dhe ndjekur përparimin tuaj.

Hyrje
</>
Babala Software Netzwerk — Apps, Websites & KI-Lösungen aus Füllinsdorf BL
© 2026 Babala Özdemir · UID CHE-322.105.560 babala.ch info@babala.ch 076 792 63 50 Facebook Instagram