Advanced Grouping

All lectures for UZ purposes
Daraja, Dars
Mavjud

5.1 HAVING Operator

SQLda yana bir foydali operator bor, u GROUP BY bilan birga qo'llaniladi, uning nomi HAVING.

Ma'nosiga ko'ra u WHERE operatori bilan to'liq teng. Faqatgina WHERE guruhlashdan oldin qatorlarni filtrlash imkonini beradi, HAVING esa guruhlashdan keyin yozuvlarga qo'llanadigan filtrni belgilashga imkon beradi.

Guruhlash va guruhlash natijalarini filtrlashda so'rovning umumiy ko'rinishi quyidagicha:


SELECT kolonkalar
FROM jadval
WHERE shart
GROUP BY kolonkalar
HAVING shart
        

HAVING faqat GROUP BY so'rovda mavjud bo'lsa ishlatilishi mumkin.

Keling, yillarga qarab ishga olingan xodimlar sonini ko'rsatuvchi so'rov yozamiz.


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

        

Va bu so'rovning natijasi:

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

Endi esa bitta yoki undan kam xodim olingan yillarni chiqarib tashlaymiz. Misol:


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

Va bu so'rovning natijasi:

hire_year total
2015 2

5.3 Operatorlarni bajarish tartibi

To'g'ri va samarali SQL-so'rovlar yozish uchun ularning SQL-server tomonidan qanday bajarilishini tushunish kerak.

Amallarni bajarish tartibi qat'iy va sizning xohishingizga bog'liq emas. Siz operatorlarni joylab, boshqa tartibni hosil qilolmaysiz.

SQL-so'rov bir necha bosqichda amalga oshiriladi. Shu tartibda.

  1. Bosqich 1 – qatorlarni tanlash
    • Avval belgilangan jadvallardan barcha qatorlar tanlanadi.
    • Keyin ularga hisoblangan maydonlar qo'shiladi.
    • Va keyin WHERE shartiga javob beradigan qatorlar qoladi.
  2. Bosqich 2 – guruhlash
    • Shundan so'ng olingan natijalarga guruhlash qo'llaniladi.
    • Guruhlash jarayonida COUNT(*) kabi maydonlar hisoblanadi.
    • Va nihoyat guruhlash natijasiga HAVING filtri qo'llaniladi.
  3. Bosqich 3 – saralash
    • Oldingi bosqichlarda olingan qatorlar ORDER BY yordamida saralanadi.

Va nihoyat, natijani LIMIT va OFFSET yordamida kesish mumkin.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION