mysql> SELECT *FROM employee ORDER BY salary;
+----+---------+------------+------+-----------+-----------+---------+
| id | name | birth_date | sex | position | salary | dept_id |
+----+---------+------------+------+-----------+-----------+---------+
| 3 | JENNY | 2000-10-12 | F | DEV_BACK | 50000000 | 1003 |
| 14 | SAM | NULL | M | DEV_INFRA | 70000000 | NULL |
| 11 | SUZANNE | 1993-03-23 | F | PO | 75000000 | 1005 |
| 9 | HENRY | 1982-05-20 | M | HR | 82000000 | NULL |
| 13 | JISUNG | NULL | M | PO | 90000000 | 1005 |
| 15 | SIMON | 1982-08-04 | M | PL | 90000000 | NULL |
| 1 | MESSI | 1987-02-01 | M | DEV_BACK | 100000000 | 1003 |
| 5 | DINGYO | 1990-11-05 | M | CTO | 120000000 | NULL |
| 7 | MINA | 1993-06-17 | F | DSGN | 160000000 | 1004 |
| 12 | CURRY | 1998-01-15 | M | PLN | 170000000 | 1004 |
| 2 | JANE | 1996-05-05 | F | DSGN | 180000000 | 1004 |
| 10 | NICOLE | 1991-03-26 | F | DEV_FRONT | 180000000 | 1003 |
| 4 | BROWN | 1996-03-13 | M | CEO | 240000000 | NULL |
| 6 | JULIA | 1986-12-11 | F | CFO | 240000000 | NULL |
+----+---------+------------+------+-----------+-----------+---------+
14 rows in set (0.02 sec)
내림차순 정렬
mysql> SELECT *FROM employee ORDER BY salary DESC;
+----+---------+------------+------+-----------+-----------+---------+
| id | name | birth_date | sex | position | salary | dept_id |
+----+---------+------------+------+-----------+-----------+---------+
| 4 | BROWN | 1996-03-13 | M | CEO | 240000000 | NULL |
| 6 | JULIA | 1986-12-11 | F | CFO | 240000000 | NULL |
| 2 | JANE | 1996-05-05 | F | DSGN | 180000000 | 1004 |
| 10 | NICOLE | 1991-03-26 | F | DEV_FRONT | 180000000 | 1003 |
| 12 | CURRY | 1998-01-15 | M | PLN | 170000000 | 1004 |
| 7 | MINA | 1993-06-17 | F | DSGN | 160000000 | 1004 |
| 5 | DINGYO | 1990-11-05 | M | CTO | 120000000 | NULL |
| 1 | MESSI | 1987-02-01 | M | DEV_BACK | 100000000 | 1003 |
| 13 | JISUNG | NULL | M | PO | 90000000 | 1005 |
| 15 | SIMON | 1982-08-04 | M | PL | 90000000 | NULL |
| 9 | HENRY | 1982-05-20 | M | HR | 82000000 | NULL |
| 11 | SUZANNE | 1993-03-23 | F | PO | 75000000 | 1005 |
| 14 | SAM | NULL | M | DEV_INFRA | 70000000 | NULL |
| 3 | JENNY | 2000-10-12 | F | DEV_BACK | 50000000 | 1003 |
+----+---------+------------+------+-----------+-----------+---------+
14 rows in set (0.00 sec)
같은 부서 별로 정렬 후 연봉기준 내림차순으로 정렬
mysql> SELECT *FROM employee ORDER BY dept_id ASC, salary DESC;
+----+---------+------------+------+-----------+-----------+---------+
| id | name | birth_date | sex | position | salary | dept_id |
+----+---------+------------+------+-----------+-----------+---------+
| 4 | BROWN | 1996-03-13 | M | CEO | 240000000 | NULL |
| 6 | JULIA | 1986-12-11 | F | CFO | 240000000 | NULL |
| 5 | DINGYO | 1990-11-05 | M | CTO | 120000000 | NULL |
| 15 | SIMON | 1982-08-04 | M | PL | 90000000 | NULL |
| 9 | HENRY | 1982-05-20 | M | HR | 82000000 | NULL |
| 14 | SAM | NULL | M | DEV_INFRA | 70000000 | NULL |
| 10 | NICOLE | 1991-03-26 | F | DEV_FRONT | 180000000 | 1003 |
| 1 | MESSI | 1987-02-01 | M | DEV_BACK | 100000000 | 1003 |
| 3 | JENNY | 2000-10-12 | F | DEV_BACK | 50000000 | 1003 |
| 2 | JANE | 1996-05-05 | F | DSGN | 180000000 | 1004 |
| 12 | CURRY | 1998-01-15 | M | PLN | 170000000 | 1004 |
| 7 | MINA | 1993-06-17 | F | DSGN | 160000000 | 1004 |
| 13 | JISUNG | NULL | M | PO | 90000000 | 1005 |
| 11 | SUZANNE | 1993-03-23 | F | PO | 75000000 | 1005 |
+----+---------+------------+------+-----------+-----------+---------+
14 rows in set (0.00 sec)
mysql> SELECT COUNT(*) FROM employee;
+----------+
| COUNT(*) |
+----------+
| 14 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*), MAX(salary), MIN(salary), AVG(salary)
-> FROM works_on w JOIN employee E ON W.empl_id= E.id
-> WHERE W.proj_id= 2002;
+----------+-------------+-------------+----------------+
| COUNT(*) | MAX(salary) | MIN(salary) | AVG(salary) |
+----------+-------------+-------------+----------------+
| 4 | 180000000 | 70000000 | 111250000.0000 |
+----------+-------------+-------------+----------------+
1 row in set (0.00 sec)
mysql> SELECT W.proj_id, COUNT(*), MAX(salary), MIN(salary), AVG(salary)
-> FROM works_on w JOIN employee E ON W.empl_id= E.id
-> GROUP BY W.proj_id;
+---------+----------+-------------+-------------+----------------+
| proj_id | COUNT(*) | MAX(salary) | MIN(salary) | AVG(salary) |
+---------+----------+-------------+-------------+----------------+
| 2001 | 4 | 120000000 | 82000000 | 98000000.0000 |
| 2002 | 4 | 180000000 | 70000000 | 111250000.0000 |
| 2003 | 6 | 240000000 | 50000000 | 173333333.3333 |
+---------+----------+-------------+-------------+----------------+
3 rows in set (0.00 sec)
mysql> SELECT W.proj_id, COUNT(*), MAX(salary), MIN(salary), AVG(salary)
-> FROM works_on w JOIN employee E ON W.empl_id= E.id
-> GROUP BY W.proj_id
-> HAVING COUNT(*) >=6;
+---------+----------+-------------+-------------+----------------+
| proj_id | COUNT(*) | MAX(salary) | MIN(salary) | AVG(salary) |
+---------+----------+-------------+-------------+----------------+
| 2003 | 6 | 240000000 | 50000000 | 173333333.3333 |
+---------+----------+-------------+-------------+----------------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*), dept_id
-> FROM employee
-> GROUP BY dept_id
-> ORDER BY COUNT(*) DESC;
+----------+---------+
| COUNT(*) | dept_id |
+----------+---------+
| 6 | NULL |
| 3 | 1003 |
| 3 | 1004 |
| 2 | 1005 |
+----------+---------+
4 rows in set (0.00 sec)
// 아래와 같이 명칭을 줘서 직관적으로 표현 할 수 있다.
mysql> SELECT dept_id, COUNT(*) AS empl_count
-> FROM employee
-> GROUP BY dept_id
-> ORDER BY empl_count DESC;
+---------+------------+
| dept_id | empl_count |
+---------+------------+
| NULL | 6 |
| 1003 | 3 |
| 1004 | 3 |
| 1005 | 2 |
+---------+------------+
4 rows in set (0.00 sec)
mysql> SELECT dept_id, sex, COUNT(*) AS empl_count
-> FROM employee
-> GROUP BY dept_id, sex
-> ORDER BY empl_count DESC;
+---------+------+------------+
| dept_id | sex | empl_count |
+---------+------+------------+
| NULL | M | 5 |
| 1004 | F | 2 |
| 1003 | F | 2 |
| 1003 | M | 1 |
| NULL | F | 1 |
| 1005 | F | 1 |
| 1004 | M | 1 |
| 1005 | M | 1 |
+---------+------+------------+
8 rows in set (0.00 sec)
mysql> SELECT dept_id, AVG(salary) FROM employee
-> GROUP BY dept_id
-> HAVING AVG(salary)<(
-> SELECT AVG(salary) FROM employee // subquery를 사용하여 비교하여 준다.
-> );
+---------+----------------+
| dept_id | AVG(salary) |
+---------+----------------+
| 1003 | 110000000.0000 |
| 1005 | 82500000.0000 |
+---------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT W.proj_id, COUNT(*), ROUND(AVG(salary),0)
-> FROM works_on W JOIN employee E ON W.empl_id=E.id
-> WHERE E.birth_date BETWEEN '1990-01-01' AND '1999-12-31'
-> GROUP BY W.proj_id;
+---------+----------+----------------------+
| proj_id | COUNT(*) | ROUND(AVG(salary),0) |
+---------+----------+----------------------+
| 2003 | 4 | 187500000 |
| 2001 | 1 | 120000000 |
| 2002 | 3 | 125000000 |
+---------+----------+----------------------+
3 rows in set (0.01 sec)
mysql> SELECT W.proj_id, COUNT(*), ROUND(AVG(salary),0)
-> FROM works_on W JOIN employee E ON W.empl_id=E.id
-> WHERE E.birth_date BETWEEN '1990-01-01' AND '1999-12-31'
-> GROUP BY W.proj_id
-> ORDER BY W.proj_id;
+---------+----------+----------------------+
| proj_id | COUNT(*) | ROUND(AVG(salary),0) |
+---------+----------+----------------------+
| 2001 | 1 | 120000000 |
| 2002 | 3 | 125000000 |
| 2003 | 4 | 187500000 |
+---------+----------+----------------------+
3 rows in set (0.00 sec)
mysql> SELECT W.proj_id, COUNT(), ROUND(AVG(salary),0) -> FROM works_on W JOIN employee E ON W.empl_id=E.id -> WHERE E.birth_date BETWEEN '1990-01-01' AND '1999-12-31' -> AND W.proj_id IN(SELECT proj_id FROM works_on -> GROUP BY proj_id HAVING COUNT()>=6)
//프로젝트 참여 인원이 6명 이상인 프로젝트를 구하는 subquery
-> GROUP BY W.proj_id
-> ORDER BY W.proj_id;
+---------+----------+----------------------+
| proj_id | COUNT(*) | ROUND(AVG(salary),0) |
+---------+----------+----------------------+
| 2003 | 4 | 187500000 |
+---------+----------+----------------------+
1 row in set (0.00 sec)
11. DBMS에 저장해서 쓰는 함수 2 (0) | 2023.08.25 |
---|---|
10. DBMS에 저장해서 쓰는 함수 1 (0) | 2023.08.24 |
7. SQL로 데이터 조회하기 (0) | 2023.08.21 |
6. SQL로 데이터 조회하기 2 (0) | 2023.08.18 |
5. SQL로 데이터 조회하기(1) (0) | 2023.08.17 |