5 рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди рдиреМрдХрд░реА рдХреЗ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВ

рд╣рд╛рд▓рд╛рдВрдХрд┐ SQL рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди SQL рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЬрд╝рд░реВрд░реА рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рд╣реА рдирд╣реАрдВ рд╣реИ SELECT, FROMрдФрд░ WHEREред рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдПрд╕рдХреНрдпреВрдПрд▓ рдирд┐рд░реНрдорд╛рдг рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЬрд╛рдирддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ:





  1. рдмреБрдирд┐рдпрд╛рджреА рдПрд╕рдХреНрдпреВрдПрд▓ рдЬреНрдЮрд╛рди рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░ рдХреА рдЦреЛрдЬред
  2. SQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ Leetcode рдХреЗ 5 SQL рдкреНрд░рд╢реНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдХреНрд╕рд░ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВред

рдкреНрд░рд╢реНрди рд╕рдВрдЦреНрдпрд╛ 1: рд╡реЗрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рджреВрд╕рд░рд╛ рд╕реНрдерд╛рди


рдХрд░реНрдордЪрд╛рд░реА рд╡реЗрддрди рдЬрд╛рдирдХрд╛рд░реА (рд╕рд╛рде рдореЗрдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ SQL рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВ Employee) рдПрдХ рдкреНрд░рд╡реЗрд╢ рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╡реЗрддрди рд╕реЗ рдпреБрдХреНрддред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдРрд╕реА рдХреНрд╡реЗрд░реА рд╡рд╛рдкрд╕ рдЖрдиреА рдЪрд╛рд╣рд┐рдП 200ред рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЙрдЪреНрдЪрддрдо рд╡реЗрддрди рд╕реЗ рдХрдо рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП nullред

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

Ision рдирд┐рд░реНрдгрдп A: рдЙрдкрдпреЛрдЧ IFNULLрдФрд░OFFSET


рдпрд╣рд╛рдБ рдореБрдЦреНрдп рддрдВрддреНрд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  • IFNULL(expression, alt): expressionрдпрджрд┐ рдпрд╣ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдирд╛ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ nullред рдЕрдиреНрдпрдерд╛, рддрд░реНрдХ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ altред nullрдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рдирд╣реАрдВ рд╣реИ рддреЛ рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред
  • OFFSET: рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ ORDER BYрдкрд╣рд▓реА nрдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдпрд╛рдиреА, рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╡реЗрддрди, рдЬрд┐рд╕ рдкрд░ рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИ)ред

рдпрд╣рд╛рдБ рдПрдХ рддреИрдпрд╛рд░ рдЕрдиреБрд░реЛрдз рд╣реИ:

SELECT
    IFNULL(
        (SELECT DISTINCT Salary
        FROM Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1
        ), null) as SecondHighestSalary
FROM Employee
LIMIT 1

тЦН рд╕рдорд╛рдзрд╛рди рдмреА: тАЛтАЛрдЙрдкрдпреЛрдЧ MAX


рдиреАрдЪреЗ рдХреНрд╡реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ MAXред рдпрд╣рд╛рдВ, рдЙрдЪреНрдЪрддрдо рд╡реЗрддрди рдорд╛рди рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреВрд░реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЕрдзрд┐рдХрддрдо рд╡реЗрддрди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рд╡рд╣ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП - рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╡реЗрддрдиред

SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary != (SELECT MAX(salary) FROM Employee)

рдкреНрд░рд╢реНрди # 2: рдИрдореЗрд▓ рдкрддреЛрдВ рдХреА рдирдХрд▓ рдХрд░реЗрдВ


SQL рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ Personрд╕рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдИрдореЗрд▓ рдкрддреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреА рд╣реИ ред

+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+

In рдирд┐рд░реНрдгрдп A: рдЙрдкрд╢рдо COUNTрдореЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЙрдкрд╢реНрд░реЗрдгреА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрддреЗ рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рддрдм рдЙрдкрд╢реНрд░реЗрдгреА рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ WHERE count > 1ред рдХреНрд╡реЗрд░реА рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд╛рдП рдЧрдП рдкрддреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рдПрдЧреАред

SELECT Email
FROM (
    SELECT Email, count(Email) AS count
    FROM Person
    GROUP BY Email
) as email_count
WHERE count > 1

тЦН рд╕рдорд╛рдзрд╛рди рдмреА: тАЛтАЛрдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ HAVING


  • HAVING: рдпрд╣ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ WHEREрд╕рд╛рде рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ GROUP BYред

SELECT Email
FROM Person
GROUP BY Email
HAVING count(Email) > 1

рдкреНрд░рд╢реНрди рд╕рдВрдЦреНрдпрд╛ 3: рдмрдврд╝рддрд╛ рддрд╛рдкрдорд╛рди


рдПрдХ SQL рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ Weatherрд╕рднреА рддрд┐рдерд┐рдпреЛрдВ (рддрд┐рдерд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ) рдХреЛ рдЦреЛрдЬрддреА рд╣реИ рдЬрдм рддрд╛рдкрдорд╛рди рдкреВрд░реНрд╡рд╡рд░реНрддреА рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рддрд╛рдкрдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╣рдо рдЙрди рддрд╛рд░реАрдЦреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ "рдЖрдЬ рдХрд╛" рддрд╛рдкрдорд╛рди "рдХрд▓" тАЛтАЛрд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
|       1 |       2015-01-01 |               10 |
|       2 |       2015-01-02 |               25 |
|       3 |       2015-01-03 |               20 |
|       4 |       2015-01-04 |               30 |
+---------+------------------+------------------+

тЦНSolution: DATEDIFF


  • DATEDIFF: рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджреЛ рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ тАЬрдЖрдЬтАЭ рдФрд░ тАЬрдХрд▓тАЭ рдХреЗ рддрд╛рдкрдорд╛рди рдХреА рдареАрдХ-рдареАрдХ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рд╕рд╛рдзрд╛рд░рдг рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╡реЗрд░реА рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ: рд╣рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╡реЗ рдЬрд┐рд╕ рддрд╛рд░реАрдЦ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реА рддрд╛рдкрдорд╛рди рдХреЛ "рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде" рдХрд▓ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рддрд╛рдкрдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛред

SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1

рдкреНрд░рд╢реНрди рд╕рдВрдЦреНрдпрд╛ 4: рдЗрдХрд╛рдИ рдореЗрдВ рдЙрдЪреНрдЪрддрдо рд╡реЗрддрди


рддрд╛рд▓рд┐рдХрд╛ EmployeeрдХрдВрдкрдиреА рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ IdрдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( ), рдЙрд╕рдХреЗ рдирд╛рдо ( Name), рд╡реЗрддрди ( Salary), рдФрд░ рдХрдВрдкрдиреА рдХреЗ рд╡рд┐рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдБ рд╡рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ( Department)ред

+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+

рддрд╛рд▓рд┐рдХрд╛ DepartmentрдореЗрдВ рдХрдВрдкрдиреА рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

рдЕрдзрд┐рдХрддрдо рд╡реЗрддрди рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА SQL рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╛рди рдХреНрд╡реЗрд░реА рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ (рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрджреЗрд╢ рдирд╣реАрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
+------------+----------+--------+

тЦНSolution: рдЯреАрдо IN


рдХрдорд╛рдВрдб INрдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ WHEREрд╢рд░реНрддреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрдИ рдХрдорд╛рдВрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ ORред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдорд╛рди рд╣реИрдВ:

WHERE country = тАШCanadaтАЩ OR country = тАШUSAтАЩ
WHERE country IN (тАШCanadaтАЩ, тАЩUSAтАЩ).

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд╛рдЧ DepartmentрдХрд╛ рдирд╛рдо ( ), рдХрд░реНрдордЪрд╛рд░реА рдХрд╛ рдирд╛рдо ( Employee) рдФрд░ рдЙрд╕рдХрд╛ рд╡реЗрддрди ( Salary) рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдЗрдХрд╛рдИ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдмрдирд╛рдиреЗ DepartmentID) рдФрд░ рдЗрд╕ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╡реЗрддрдиред рдлрд┐рд░ рд╣рдо рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд┐рддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд░рд┐рдгрд╛рдореА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗрд╡рд▓ рддрднреА рдЧрд┐рд░рддреА рд╣реИ рдЬрдм DepartmentIDрдФрд░ Salaryрдкрд╣рд▓реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реЛред

SELECT
    Department.name AS 'Department',
    Employee.name AS 'Employee',
    Salary
FROM Employee
INNER JOIN Department ON Employee.DepartmentId = Department.Id
WHERE (DepartmentId , Salary) 
    IN
    (   SELECT
            DepartmentId, MAX(Salary)
        FROM
            Employee
        GROUP BY DepartmentId
 )

рдкреНрд░рд╢реНрди рдирдВрдмрд░ 5: рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд╛рдВрдЯ рдХрд░рдирд╛


рдореИрд░реА рдПрдХ рд╣рд╛рдИ рд╕реНрдХреВрд▓ рдЯреАрдЪрд░ рд╣реИрдВред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ seatрдЬреЛ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЙрдирдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред рдореВрд▓реНрдп idрдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣реА рд╣реИред рдореИрд░реА рдкрдбрд╝реЛрд╕реА рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИрдВред

рдпрд╣рд╛рдВ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+

рдкрдбрд╝реЛрд╕реА рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд╛рдВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+

рдПрдХ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╢рд┐рдХреНрд╖рдХ рдХреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЫрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рд╖рдо рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рдЫрд╛рддреНрд░ рдХреЛ рдХрд╣реАрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

UsingSolution: рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ WHEN


SQL рдирд┐рд░реНрдорд╛рдг CASE WHEN THENрдХреЛ ifрдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ WHENрдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рд╖рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд▓рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛ рдСрдкрд░реЗрдЯрд░ WHENрдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореЗрдВ 1 рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1, 3, 5 2, 4, 6 рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рднреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (1, 4, 6 рдХреЛ 1, 3, 5) рдореЗрдВ рд╕реЗ рдШрдЯрд╛рдХрд░ 1 рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

SELECT 
    CASE 
        WHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
        WHEN id%2 = 1 THEN id + 1
        ELSE id - 1
    END AS id, student
FROM seat
ORDER BY id

рд╕рд╛рд░рд╛рдВрд╢


рд╣рдордиреЗ рдХрдИ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЙрдиреНрдирдд рдЯреВрд▓ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдЖрдЬ рдЬреЛ рд╕реАрдЦрд╛ рд╣реИ рд╡рд╣ SQL рдореЗрдВ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдЖрдПрдЧрд╛ рдФрд░ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛ред

PS рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕ рдореЗрдВ SQL Server Express рдХреЗ рд╕рд╛рде рдПрдХ рдбреЙрдХрд░ рдЗрдореЗрдЬ рд╣реИ, рдЬреЛ рдПрдХ рдХреНрд▓рд┐рдХ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЖрдк рд╡реАрдкреАрдПрд╕ рдкрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдирдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП 3 рджрд┐рди рдореБрдлреНрдд рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ SQL рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдХрд▓рд╛ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/undefined/


All Articles