2024.12.11.์ˆ˜

kinkin_aยท2024๋…„ 12์›” 11์ผ

๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ TIL

๋ชฉ๋ก ๋ณด๊ธฐ
17/100

๐Ÿƒโ€โ™€๏ธSQL ํ€˜์ŠคํŠธ ๋‹ฌ๋ฆฌ๊ธฐ๋ฐ˜

๐Ÿ†Lv6. ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ํ’ˆ๋ชฉ์€?

1)๊ฐ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ•œ ๋ชจ๋“  ์ œํ’ˆ์˜ ์ด ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜๊ณ , ๊ณ ๊ฐ ์ด๋ฆ„, ์ด ๊ตฌ๋งค ๊ธˆ์•ก, ์ฃผ๋ฌธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

SELECT 
    oc.CustomerName,
    SUM(p.Price) 'TotalAmount',
    SUM(oc.Quantity) 'OrderCount'
FROM
    new_schema.products p
        INNER JOIN
    (SELECT 
        o.CustomerID,
            Quantity,
            CustomerName,
            Country,
            OrderID,
            ProductID,
            OrderDate AS 'CC'
    FROM
        new_schema.orders o
    JOIN new_schema.customers c ON c.CustomerID = o.CustomerID) oc ON p.ProductID = oc.ProductID
GROUP BY CustomerName
ORDER BY CustomerName; 

1.์ •๋‹ต

SELECT 
    c.CustomerName,
    SUM(p.Price * o.Quantity) AS TotalAmount,
    COUNT(o.OrderID) AS OrderCount
FROM 
    Customers c
JOIN 
    Orders o ON c.CustomerID = o.CustomerID
JOIN 
    Products p ON o.ProductID = p.ProductID
GROUP BY 
    c.CustomerName;

์ค‘์ฒฉ ์กฐ์ธ์œผ๋กœ ๋ฌถ์„ ์ˆ˜๋„ ์žˆ๋‹จ ๊ฑธ ์ฒ˜์Œ ์•Œ์•˜๊ณ , ๋ฌธ์ œ ์ž˜ ๋ชป ๋ด„ใ… .ใ… ๋ฐ˜์„ฑํ•˜์ž..

2)๊ฐ ์ œํ’ˆ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ์ œํ’ˆ์˜ ์ด๋ฆ„๊ณผ ์ด ํŒ๋งค๋Ÿ‰์„ ์กฐํšŒํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

SELECT 
    po.Category, po.ProductName AS 'Top_Product', T as 'TotalSold'
FROM
    (SELECT 
        Category, ProductName, SUM(Quantity) AS 'T'
    FROM
        new_schema.products p
    JOIN new_schema.orders o ON p.ProductID = o.ProductID
    GROUP BY 1 , 2) po
WHERE
    T = (SELECT 
            MAX(T)
        FROM
            (SELECT 
                Category, ProductName, SUM(Quantity) AS 'T'
            FROM
                new_schema.products p
            JOIN new_schema.orders o ON p.ProductID = o.ProductID
            GROUP BY 1 , 2) s);

2.์ •๋‹ต

SELECT 
    p.Category,
    p.ProductName AS Top_Product,
    SUM(o.Quantity) AS TotalSold
FROM 
    Products p
JOIN 
    Orders o ON p.ProductID = o.ProductID
GROUP BY 
    p.Category, p.ProductName
HAVING 
    SUM(o.Quantity) = (
        SELECT 
            MAX(SumQuantity)
        FROM 
            (SELECT 
                 p2.Category,
                 SUM(o2.Quantity) AS SumQuantity
             FROM 
                 Products p2
             JOIN 
                 Orders o2 ON p2.ProductID = o2.ProductID
             GROUP BY 
                 p2.Category, p2.ProductID) AS Subquery
        WHERE 
            Subquery.Category = p.Category
    );

๊ทธ๋ฃน์˜ max๊ฐ’ ์ฐพ๋Š” ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ํ–ˆ๋Š”๋ฐ๋„ ๋งค๋ฒˆ ์–ด๋ ต๋‹ค.

๐ŸฆšLv7. ์˜ˆ์‚ฐ์ด ๊ฐ€์žฅ ํฐ ํ”„๋กœ์ ํŠธ๋Š”?

์ œ์•ฝ์‚ฌํ•ญ:

  • ๋‘ ์ฟผ๋ฆฌ ๋ชจ๋‘ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ข… ์ฟผ๋ฆฌ์— ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ๊ฐ ์ง์›์ด ์†ํ•œ ๋ถ€์„œ์—์„œ ๊ฐ€์žฅ ๋†’์€ ์›”๊ธ‰์„ ๋ฐ›๋Š” ์ง์›๋“ค๋งŒ ํฌํ•จ๋œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

SELECT 
    e.Name, zz.Department, zz.S AS 'Salary'
FROM
    (SELECT 
        Department, MAX(Salary) AS 'S'
    FROM
        new_schema.employees
    GROUP BY Department) zz
        LEFT JOIN
    new_schema.employees e ON zz.S = e.Salary;

1.์ •๋‹ต

SELECT 
    e.Name,
    e.Department,
    e.Salary
FROM 
    Employees e
WHERE 
    e.Salary = (
        SELECT 
            MAX(Salary)
        FROM 
            Employees e2
        WHERE 
            e2.Department = e.Department
    );

์ •๋‹ต์—์„  ์ฃผ๋กœ where์ ˆ๋กœ ๊ทธ๋ฃนํ™” ํ•ด์„œ ์ตœ๋Œ€๊ฐ’์„ ๋ฝ‘๋Š”๋ฐ, ํ›จ์”ฌ ๊ฐ„ํŽธํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค.
๋‚˜๋Š” ๋ฌธ์ œ์— ๋”ฐ๋ผ ํ•œ์ค„์”ฉ ์ฝ”๋“œ๋ฅผ ์งœ์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

2)์ง์›์ด ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ ์ค‘ ์˜ˆ์‚ฐ์ด 10,000 ์ด์ƒ์ธ ํ”„๋กœ์ ํŠธ๋งŒ์„ ์กฐํšŒํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

SELECT 
    e.Name, h.ProjectName, h.Budget
FROM
    new_schema.employees e
        JOIN
    (SELECT 
        ep.EmployeeID, ep.ProjectID, p.ProjectName, p.Budget
    FROM
        new_schema.employeeprojects ep
    JOIN new_schema.Projects p ON ep.ProjectID = p.ProjectID) h ON e.EmployeeID = h.EmployeeID
WHERE
    h.Budget >= 10000;

2.์ •๋‹ต

SELECT 
    e.Name,
    p.ProjectName,
    p.Budget
FROM 
    Employees e
JOIN 
    EmployeeProjects ep ON e.EmployeeID = ep.EmployeeID
JOIN 
    Projects p ON ep.ProjectID = p.ProjectID
WHERE 
    p.Budget >= 10000;

์ค‘์ฒฉ์กฐ์ธ์„ ์“ฐ๋ฉด 3ํ…Œ์ด๋ธ”์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„ํŽธํ•ด์ง„๋‹ค.

๐Ÿ˜€๋А๋‚€์ 

6-2)๋ฌธ์ œ ํ‘ธ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ฑธ๋ ธ๋‹ค. ํ…Œ์ด๋ธ”์„ ์ค‘๊ฐ„๊นŒ์ง€ ๋ฝ‘๋Š” ๊ฑด ์ˆ˜์›”ํ–ˆ๋Š”๋ฐ, ๊ทธ ๋‹ค์Œ ์ตœ๋Œ€๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒŒ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค. ์ผ๋‹จ ์ƒ๊ฐ๋‚˜๋Š” ๋Œ€๋กœ ๋˜‘๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ๋‘ ๋ฒˆ ์จ์„œ ํ’€์—ˆ์ง€๋งŒ, ์ข€ ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๊ฐ€ ์žˆ์ง€ ์•Š์„๊นŒ? ์ •๋‹ต์—์„œ๋„ ๋‘ ๋ฒˆ ์ผ์œผ๋‹ˆ, ์•„์ง ๋‚ด๊ฐ€ ์ด๊ฒƒ๊นŒ์ง€ ์ƒ๊ฐํ•  ๋‹จ๊ณ„๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€