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.
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.
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.
ANDkërkon çdo kusht,ORtë 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 disaOR: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ë.
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.WHERE discount_code = NULL nuk kthen asnjë rresht?Hyrje për të përgjigjur dhe ndjekur përparimin tuaj.
Hyrje