4.1 Pagpapangkat ng mga hanay

Ang napakahalaga rin ay kung papangkatin mo ang mga talaan, sa seksyon na SELECTmaaari mo lamang tukuyin ang mga hanay kung saan nakapangkat ang data.

Ikawhindi pwedemagsulat ng isang uri ng query at tukuyin ang SELECThanay ng pangalan sa seksyon :

SELECT brand, name
FROM product
GROUP BY brand

Mayroon kang isang grupo ng mga row sa talahanayan ng produkto na may field ng pangalan , at hindi malinaw kung aling row ang kailangan mong palitan dito. Isipin muli: gusto mong malaman ang bilang ng mga produkto ng bawat tatak at kung paano makukuha ng resultang talahanayan ang pangalan ng produkto?

Kung gagamitin mo ang operator GROUP BY, hindi makapasok ang mga normal na row sa iyong resulta, ngunit mga column lamang kung saan nakapangkat ang data at "kinakalkulang mga column", gaya ngCOUNT(*)

4.2 Pagpapangkat ayon sa mga kalkuladong column

Ngunit maaari kang magpangkat ayon sa maramihang mga column at maging ayon sa mga nakalkulang column. Halimbawa:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

At ang resulta ng query na ito:

hire_year kabuuan
2012 1
2013 1
2014 1
2015 2
2018 1

Suriin natin ang aming kahilingan.

Sa talahanayan ng empleyado , ang bawat empleyado ay may natatanging petsa ng pag-hire, kaya ang pagpapangkat ng data ayon dito ay hindi gagana - magkakaroon ng isang talaan para sa bawat petsa at ang pagpapangkat ay hindi magiging makabuluhan. Ngunit kung lilipat tayo mula sa petsa ng pag-hire hanggang sa taon ng pag-hire, maaaring ito ay isang sitwasyon kung saan ang kumpanya ay kumuha ng ilang empleyado sa parehong taon.

Tingnan natin muli kung ano ang magiging hitsura ng talahanayang ito bago pagpangkatin:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

At ang resulta ng query na ito:

id pangalan hire_year Sumali sa date
1 Ivanov Ivan 2012 2012-06-30
2 Petrov Petr 2013 2013-08-12
3 Ivanov Sergey 2014 2014-01-01
4 Rabinovich Moisha 2015 2015-05-12
5 Kirienko Anastasia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Ngunit ang resultang talahanayang ito ay maaaring pagsama-samahin ayon sa hire_year at alamin kung gaano karaming tao ang natanggap sa isang partikular na taon.

4.3 Pagpapangkat ayon sa maramihang mga hanay

Ngayon subukan nating alamin kung ilang empleyado ang natanggap natin sa bawat buwan ng bawat taon. Upang gawin ito, kailangan nating magdagdag ng hindi isa, ngunit dalawang kalkuladong field sa query nang sabay-sabay - ang taon ng pag-upa (hire_year) at ang buwan ng pag-upa (hire_month).

Sumulat tayo ng isang query tulad nito:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

At ang resulta ng query na ito:

id pangalan hire_year hire_month Sumali sa date
1 Ivanov Ivan 2012 6 2012-06-30
2 Petrov Petr 2013 8 2013-08-12
3 Ivanov Sergey 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 2015-05-12
5 Kirienko Anastasia 2015 10 2015-10-10
6 Vaska 2018 labing-isa 2018-11-11

Kung papangkatin namin ang data sa talahanayan ng resultang ito ayon sa buwan, papangkatin lang namin ang mga tao sa mga grupo, anuman ang taon kung kailan sila natanggap. At kailangan namin ang resultang talahanayan upang magkaroon ng tatlong column: taon, buwan, at ang bilang ng mga empleyadong tinanggap.

Upang gawin ito, pagkatapos ng operator, GROUP BYkailangan mong gamitin ang pangalan ng hindi isang haligi, ngunit dalawa. Halimbawa:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

At ang resulta ng query na ito:

hire_year hire_month kabuuan
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 labing-isa 1

Mayroon kaming kaunting mga tala sa talahanayan, kaya mayroong mga yunit sa lahat ng dako sa kabuuang hanay. At siya nga pala, tandaan na kapag mas maraming column ang pinagpangkat namin, mas marami kaming row sa resulta.