์ฌ์ฉ๋๋ ์์๋ค์ ๋ฐ๋ก ๋ช ์๋์ง ์๋ ํ chinook(SQLite training ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
SQL ๋ด์ฅํจ์
์งํฉ์ฐ์ฐ
- ๋ ์ฝ๋๋ค์ ์กฐํํ๊ณ ๋ถ๋ฅํ ๋ค์ ํน์ ์์ ์ ํ๋ ๋ฑ์ ์งํฉ์ฐ์ฐ
GROUP BY
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋, ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด์ ์กฐํํ๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ
SELECT State, COUNT(*) # ๊ฐ State๋ง๋ค ๊ฐฏ์๋ฅผ ์ธ์ด ์ค๋๋ค.(State๋ง๋ค ๋ฌถ์์ด ํ์ฑ๋์ด์์ผ๋)
FROM customers
GROUP BY State;
HAVING
- GROUP BY๋ก ์กฐํ๋ ๊ฒฐ๊ณผ์ ํํฐ๋ฅผ ์ ์ฉ
SELECT State, COUNT(*)
FROM customers
GROUP BY State
HAVING COUNT(*) >= 3
์ฌ๊ธฐ์ TIP
WHERE
์ HAVING
์ ์ฐจ์ด
- WHERE : ๊ทธ๋ฃนํํ๊ธฐ ์ ์ ์กฐํ๋๋ ๋ ์ฝ๋๋ฅผ ํํฐ
- HAVING : ๊ทธ๋ฃนํํ ๊ฒฐ๊ณผ์ ๋ํ ํํฐ
์ฆ,
- GROUP BY ํ๊ธฐ ์ ํํฐ : WHERE
- GROUP BY ํ ๊ฒฐ๊ณผ์ ๋ํ ํํฐ : HAVING
GROUP BY ํ ์ฌ์ฉํ ์ ์๋ ์ง๊ณํจ์
COUNT()
SELECT State, COUNT(*) FROM customers
GROUP BY State;
SUM()
SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId;
AVG()
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;
MAX(), MIN()
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId
CASE
- ํ์ด์ฌ์ IF ๋ฌธ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ
- CASE๋ฅผ ์ฌ์ฉํ์ฌ ์ ํด์ง ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
SELECT CASE
WHEN CustomerId <= 25 THEN 'GROUP 1'
WHEN CustomerId <= 50 THEN 'GROUP 2'
ELSE 'GROUP 3'
END
FROM customers
SUBQUERY ๋งค์ฐ๋งค์ฐ ์ค์!!! ๊ฐ๋ ์ ํ์คํ ์ดํดํ์!!
- ์ฟผ๋ฆฌ๋ฌธ์ ์์คํ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ์ ํฌํจํ๋ ๊ฒ
- ์คํ๋๋ ์ฟผ๋ฆฌ์ ์ค์ฒฉ์ผ๋ก ์์นํด ์ ๋ณด๋ฅผ ์ ๋ฌ
- ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๊ฐ๋ณ๊ฐ๋ค ํน์ ๋ ์ฝ๋ ๋ฆฌ์คํธ๋ฅผ ๋๋ ค์ค ์ ์์ต๋๋ค.
- ๋ํ ํ๋์ ์ปฌ๋ผ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค.
SELECT customers.LastName ,
(SELECT COUNT(*) FROM invoices WHERE customers.CustomerId = invoices.CustomerId) AS InvoiceCount
FROM customers;
์ฌ๋ฏธ์๋ ๊ฒ์ ์๋ฅผ JOIN ์ผ๋ก๋ ๋ฐ๊ฟ์ ํํ ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค
SELECT c.LastName, COUNT(*) AS InvoiceCount
FROM customers AS c
JOIN invoices AS i ON i.CustomerId = c.CustomerId
GROUP BY c.CustomerId;
์๋์ ์๋ธ์ฟผ๋ฆฌ ํ์ฉ ์ฐธ๊ณ
IN, NOT IN
- IN์ ํน์ ํ ๊ฐ๋ค์ด ์๋ธ์ฟผ๋ฆฌ์ ์๋์ง ํ์ธ ํ ์ ์์ต๋๋ค.
SELECT *
FROM customers
WHERE CustomerId IN (SELECT invoices.CustomerId FROM invoices WHERE invoices.Total < 10);
FROM
SELECT *
FROM (
SELECT CustomerId
FROM customers
WHERE CustomerId < 10
);
'๐ฟ Data > ์ด๋ชจ์ ๋ชจ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQLite_sqlite3, PostgreSQL_psycopg2 (0) | 2022.01.22 |
---|---|
SQL_SELECT์ ์คํ ์์ (0) | 2022.01.20 |
SQL_SQLite ์์ฃผ ์ฐ๋ ๋ฌธ๋ฒ (0) | 2022.01.20 |
Boosting(vs bagging) (0) | 2022.01.06 |
Model Interpreting (0) | 2022.01.06 |