CodeGym/Java Course/All lectures for MR purposes/рдкреНрд░рдЧрдд рдЧрдЯрдмрд╛рдЬреА

рдкреНрд░рдЧрдд рдЧрдЯрдмрд╛рдЬреА

рдЙрдкрд▓рдмреНрдз

5.1 рд╡рд┐рдзрд╛рди рдЕрд╕рдгреЗ

SQL рдордзреНрдпреЗ рдЖрдгрдЦреА рдПрдХ рдЙрдкрдпреБрдХреНрдд рдСрдкрд░реЗрдЯрд░ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ GROUP BY, рддреНрдпрд╛рд▓рд╛ рдореНрд╣рдгрддрд╛рдд HAVING.

рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрд░реНрдерд╛рдиреЗ, рддреЗ рдСрдкрд░реЗрдЯрд░рд╢реА рдкреВрд░реНрдгрдкрдгреЗ рд╕рдорд╛рди рдЖрд╣реЗ WHERE. рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд WHEREрдЧрдЯрдмрджреНрдз рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдПрдХ рдкрдВрдХреНрддреА рдлрд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ рдЖрдгрд┐ рдорджрддреАрдиреЗ HAVINGрддреБрдореНрд╣реА рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛ рдЬреЛ рдЧрдЯрдмрджреНрдз рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд░реЗрдХреЙрд░реНрдбрд╡рд░ рд▓рд╛рдЧреВ рд╣реЛрдИрд▓.

рдЧреНрд░реБрдкрд┐рдВрдЧ рдЖрдгрд┐ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЧреНрд░реБрдкрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд░рддрд╛рдирд╛ рдХреНрд╡реЗрд░реАрдЪреЗ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ:

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition

HAVINGрд╡рд┐рдирдВрддреАрдордзреНрдпреЗ рдЕрд╕реЗрд▓ рддрд░рдЪ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ GROUP BY.

рдЪрд▓рд╛ рдПрдХ рдХреНрд╡реЗрд░реА рд▓рд┐рд╣реВрдпрд╛ рдЬрд┐рдереЗ рдЖрдореНрд╣реА рд╡рд░реНрд╖рд╛рдиреБрд╕рд╛рд░ рдирд┐рдпреБрдХреНрдд рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВ.

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

рдЖрдгрд┐ рдпрд╛ рдХреНрд╡реЗрд░реАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо:

рднрд╛рдбреНрдпрд╛рдЪреЗ_рд╡рд░реНрд╖ рдПрдХреВрдг
2012 рез
2013 рез
2014 рез
2015 2
2018 рез

рдЖрдгрд┐ рдЖрддрд╛ рдЖрдореНрд╣реА рддреНрдпрд╛рддреВрди рдПрдХ рдХрд┐рдВрд╡рд╛ рдХрдореА рдХрд░реНрдордЪрд╛рд░реА рдХрд╛рдорд╛рд╡рд░ рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрд╖рд╛рдВрдирд╛ рд╡рдЧрд│рддреЛ. рдЙрджрд╛рд╣рд░рдг:

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

рдЖрдгрд┐ рдпрд╛ рдХреНрд╡реЗрд░реАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо:

рднрд╛рдбреНрдпрд╛рдЪреЗ_рд╡рд░реНрд╖ рдПрдХреВрдг
2015 2

5.3 рд╡рд┐рдзрд╛рдирд╛рдВрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪрд╛ рдХреНрд░рдо

рдпреЛрдЧреНрдп рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдо SQL рдХреНрд╡реЗрд░реА рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ SQL рд╕рд░реНрд╡реНрд╣рд░рджреНрд╡рд╛рд░реЗ рдХрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдХреГрддреА рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рддреА рддреБрдордЪреНрдпрд╛ рдЗрдЪреНрдЫреЗрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдирд╛рд╣реА. рддреБрдореНрд╣реА рдСрдкрд░реЗрдЯрд░рдЪреА рдкреБрдирд░реНрд░рдЪрдирд╛ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА рдЖрдгрд┐ рд╡реЗрдЧрд│реА рдСрд░реНрдбрд░ рдорд┐рд│рд╡реВ рд╢рдХрдд рдирд╛рд╣реА.

SQL рдХреНрд╡реЗрд░реА рдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдЕрдиреЗрдХ рдЯрдкреНрдкреНрдпрд╛рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ.

  1. рд╕реНрдЯреЗрдЬ 1 - рдкрдВрдХреНрддреА рдЖрдгрдд рдЖрд╣реЗ
    • рдкреНрд░рдердо, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд╛рд░рдгреАрддреАрд▓ рд╕рд░реНрд╡ рдкрдВрдХреНрддреА рдирд┐рд╡рдбрд▓реНрдпрд╛ рдЖрд╣реЗрдд.
    • рдирдВрддрд░ рдЧрдгрдирд╛ рдХреЗрд▓реЗрд▓реА рдлреАрд▓реНрдб рддреНрдпрд╛рдВрдирд╛ рдЬреЛрдбрд▓реА рдЬрд╛рддрд╛рдд.
    • рдЖрдгрд┐ рдордЧ рд╕рд░реНрд╡ рдкрдВрдХреНрддреАрдВрдкреИрдХреА, рдХреЗрд╡рд│ рдЕрдЯ рдкреВрд░реНрдг рдХрд░рдгрд╛рд░реЗрдЪ рд░рд╛рд╣рддреАрд▓WHERE
  2. рд╕реНрдЯреЗрдЬ 2 - рд╕рдореВрд╣реАрдХрд░рдг
    • рддреНрдпрд╛рдирдВрддрд░ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╡рд░ рдЧрдЯрдмрджреНрдзрддрд╛ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рддреЗ.
    • рдЧрдЯрдмрджреНрдз рдХрд░рддрд╛рдирд╛, рдлреАрд▓реНрдб рдЬрд╕реЗ рдХреА COUNT(*).
    • рд╢реЗрд╡рдЯреА, рдЧрдЯрдмрджреНрдз рдкрд░рд┐рдгрд╛рдорд╛рд╡рд░ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ HAVING.
  3. рд╕реНрдЯреЗрдЬ 3 - рд╡рд░реНрдЧреАрдХрд░рдг
    • рдорд╛рдЧреАрд▓ рдЪрд░рдгрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрдВрдХреНрддреА рд╡рд╛рдкрд░реВрди рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реНрдпрд╛ рдЖрд╣реЗрдд ORDER BY.

рд╢реЗрд╡рдЯреА, рдкрд░рд┐рдгрд╛рдо LIMITрдЖрдгрд┐ рд╕рд╣ рдЯреНрд░рд┐рдо рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ OFFSET.

рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд