4.1 Guruhlashda kolonlar
Yana juda muhim narsa, agar sen yozuvlarni guruhlayotgan bo'lsang, SELECT
bo'limida faqat ma'lumotlarni guruhlash uchun ishlatiladigan kolonlarni ko'rsatish mumkin.
Sen yozolmaysan so'rov turini va SELECT
bo'limida name kolonkasini ko'rsatolmaysan:
SELECT brand, name
FROM product
GROUP BY brand
Sen product jadvalida bir buncha qatorlar name maydoni bilan bor, va qaysi qatorning qiymatini bu yerga qo'yish kerakligi tushunarsiz. Yana bir o'ylab ko'r: sen har bir brendning mahsulot miqdorini bilmoqchisan va qanday qilib natijaviy jadvalga mahsulot nomi tushishi mumkin?
Agar sen GROUP BY
operatoridan foydalansang, natijangga oddiy qatorlar emas, balki guruhlangan ma'lumotlar va "hisoblangan kolonlar" kiradi, masalan COUNT(*)
4.2 Hisoblangan kolonka bo'yicha guruhlash
Lekin sen bir nechta kolonka va hatto hisoblangan kolonka bo'yicha guruhlashni amalga oshirishing mumkin. Misol:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Bu so'rovning natijasi:
hire_year | total |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Keling, so'rovimizni ko'rib chiqamiz.
employee jadvalida har bir xodimning o'ziga xos yollanish sanasi mavjud, shuning uchun uni guruhlash orqali ma'lumotlarni olish imkonsiz – har bir sana uchun bitta yozuv bo'ladi va guruhlash hech qanday ma'noga ega bo'lmaydi. Lekin yollanish sanasidan yollanish yiliga o'tsak, bir yil ichida bir nechta xodimlar yollangan bo'lishi mumkin.
Keling, guruhlashdan oldin ushbu jadval qanday ko'rinishini ko'rib chiqaylik:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
join_date
FROM employee
Bu so'rovning natijasi:
id | name | hire_year | join_date |
---|---|---|---|
1 | Ivanov Ivan | 2012 | 2012-06-30 |
2 | Petrov Petr | 2013 | 2013-08-12 |
3 | Ivanov Sergey | 2014 | 2014-01-01 |
4 | Rabinovich Moysha | 2015 | 2015-05-12 |
5 | Kiriyenko Anastasiya | 2015 | 2015-10-10 |
6 | Vaska | 2018 | 2018-11-11 |
Bu natijaviy jadvalni hire_year bo'yicha guruhlash va qaysi yilda qancha odam yollanganini bilish mumkin.
4.3 Bir nechta kolonka bo'yicha guruhlash
Endi har bir yilda qaysi oylarda qancha xodimni yollaganligimizni bilishga harakat qilamiz. Buning uchun so'rovga bir emas, balki bir vaqtning o'zida ikkita hisoblangan maydonni qo'shishimiz kerak – yollanish yili (hire_year) va yollanish oyi (hire_month).
Keling, shunday so'rov yozamiz:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
join_date
FROM employee
Bu so'rovning natijasi:
id | name | hire_year | hire_month | join_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 Moysha | 2015 | 5 | 2015-05-12 |
5 | Kiriyenko Anastasiya | 2015 | 10 | 2015-10-10 |
6 | Vaska | 2018 | 11 | 2018-11-11 |
Agar biz ushbu natijaviy jadvallni oynalar bo'yicha guruhlasak, shunchaki odamlarni guruhlarga birlashtirib qo'yamiz, yollanish yiliga e'tibor bermasdan. Ammo bizga natijaviy jadvalda uchta kolon kerak: yil, oy va yollangan xodimlar soni.
Buning uchun GROUP BY
operatoridan so'ng bitta kolon nomi emas, balki ikkita kolon nomini ishlatish kerak. Misol:
SELECT
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month
Bu so'rovning natijasi:
hire_year | hire_month | total |
---|---|---|
2012 | 6 | 1 |
2013 | 8 | 1 |
2014 | 1 | 1 |
2015 | 5 | 1 |
2015 | 10 | 1 |
2018 | 11 | 1 |
Jadvalidagi yozuvlar kam, shuning uchun total kolonida hamma joyda birliklar bor. Darvoqe, e'tibor bering, qancha ko'p kolon bo'yicha guruhlasak, natijada shunchalik ko'p qator bo'ladi.
GO TO FULL VERSION