3.1 GROUP BY statement
Ang wikang SQL ay napakalakas. Bilang karagdagan sa simpleng pagkuha ng data, pinapayagan ka nitong pagpangkatin ang data sa oras ng query. Halimbawa, gusto naming malaman kung gaano karaming mga uri ng mga produkto ng bawat tatak na mayroon kami, paano namin magagawa iyon?
Mayroong isang espesyal na operator para dito GROUP BY
, narito kung paano ito isinulat.
GROUP BY column
Sumulat tayo ng query na humihiling sa SQL na ipakita ang bilang ng mga uri ng produkto para sa bawat brand. Ang ganitong kahilingan ay magmumukhang ganito:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Makukuha mo ang sumusunod na resulta ng query:
tatak | bilangin(*) |
---|---|
(WALA) | 2 |
Bosch | 4 |
IKEA | 6 |
LG | 2 |
Smartflower | 1 |
Maingat nating suriin kung anong uri ng kahilingan ang isinulat natin, at anong uri ng resulta ang nakuha natin. Bilang resulta, nakikita natin ang dalawang hanay. Ang una ay may listahan ng mga tatak, na lohikal. Gusto naming makakuha ng isang hanay ng mga pares na "brand --> quantity" .
Pakitandaan na sa mga pangalan ng tatak ay mayroong isang salita NULL
. Sa katunayan, mayroon kaming mga produkto sa tatak kung saan ito nakasulat NULL
, at nakikita namin ang mga ito dito. Medyo hindi inaasahan, ngunit nakakatulong. Makikita natin kung gaano karaming mga produktong walang tatak.
Ngayon tingnan natin ang kahilingan. Nais naming malaman ang bilang ng mga produkto ng bawat tatak, kaya nagsulat kami ng GROUP BY brand
, at sa SELECT
isinulat namin ang tatak at ang expressionCOUNT(*)
COUNT(*)
ay isang tinatawag na pinagsama-samang function na ginagawa sa isang pangkat ng mga row. Sa aming kaso, binibilang lang niya ang kanilang numero. Mayroong maraming mga naturang pag-andar, at titingnan natin ang mga ito sa ibang pagkakataon.
3.2 Mga kumplikadong query na may GROUP BY
Ngayon, magsulat tayo ng query kung saan itinatapon muna natin ang mga produkto na ang presyo ay mas mababa sa 10, at pagkatapos ay igrupo ang mga ito. Ang ganitong kahilingan ay magmumukhang ganito:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Makukuha mo ang sumusunod na resulta ng query:
tatak | bilangin(*) |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
Smartflower | 1 |
Nawala ang lahat ng NULL na produkto sa aming talahanayan ng mga resulta, dahil napakamura ng mga ito, at bumaba ng 1 ang bilang ng mga produkto ng IKEA. Mula 6 hanggang 5.
Iminumungkahi nito na ilapat mo muna WHERE
ang nais na mga linya upang i-filter, at pagkatapos lamang ilapat ang pagpapangkat sa resulta.
3.3 Mga pangalan ng column ng resulta
Sa pamamagitan ng paraan, maaari kang magbigay ng mga pangalan sa mga resultang column. Tingnan kung paano iminungkahi ng server ang pangalan count(*)
? Palitan natin ng total. Ang ganitong kahilingan ay magmumukhang ganito:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Makukuha mo ang sumusunod na resulta ng query:
tatak | kabuuan |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
Smartflower | 1 |
Maaari mo ring palitan ang pangalan ng mga kasalukuyang column. Kunin natin ang isa sa mga dating ginamit na query at magdagdag ng mga bagong pangalan sa mga column.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Makukuha mo ang sumusunod na resulta ng query:
product_id | pangalan ng Produkto | presyo |
---|---|---|
2 | upuan | 5.00 |
8 | lampara | 15.00 |