4.1 Pagpapangkat ng mga hanay
Ang napakahalaga rin ay kung papangkatin mo ang mga talaan, sa seksyon na SELECT
maaari mo lamang tukuyin ang mga hanay kung saan nakapangkat ang data.
Ikawhindi pwedemagsulat ng isang uri ng query at tukuyin ang SELECT
hanay 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 BY
kailangan 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.