Q1. 그룹 함수는 여러 행에 적용되어 그룹 당 하나의 결과를 출력합니다. ( True / False ) T

 

Q2. 그룹 함수는 계산에 널을 포함합니다. ( True / False ) F

 

Q3. WHERE 절은 그룹 계산에 행을 포함시키기 전에 행을 제한합니다. ( True / False ) T

 

Q4. 모든 사원의 급여 최고액, 최저액, 총액 및 평균액을 표시하십시오. 열 레이블을 각각 Maximum, Minimum, Sum 및 Average 로 지정하고 결과를 정수로 반올림한 후 작성한 SQL문을 lab5_4.sql이라는 파일에 저장하십시오.

 

select max(salary) as Maximum, min(salary) as Minimum, sum(salary) as Sum, 
round(avg(salary), 1) as Average
from employees;

 



Q5. lab5_4.sql의 질의를 수정하여 각 업무 유형별로 급여 최고액, 최저액, 총액 및 평균액을 표시하십시오. lab5_4.sql을 lab5_5.sql로 다시 저장하고 lab5_5.sql의 명령문을 실행하십시오.

select job_id, max(salary) as Maximum, min(salary) as Minimum, sum(salary) as Sum, 
avg(salary) as Average
from employees
group by job_id;

 

 


Q6. 업무가 동일한 사원 수를 표시하는 질의를 작성하십시오.

select job_id, count(job_id) as 'Count(*)'
from employees
group by job_id;

 



Q7. 관리자는 나열하지 말고 관리자 수를 확인하십시오. 열 레이블은 Number of Managers로 지정하십시오 .힌트 : MANAGER_ID 열을 사용하여 관리자 수를 확인하십시오.

select count(manager_id) as 'Number of Managers'
from employees;

 



Q8. 최고 급여와 최저 급여의 차액을 표시하는 질의를 작성하고 열 레이블을 DIFFERENCE로 지정하십시오.

select max(salary) - min(salary) as 'DIFFERENCE'
from employees

 

 


Q9. 관리자 번호 및 해당 관리자에 속한 사원의 최저 급여를 표시하십시오. 관리자를 알 수 없는 사원 및 최저 급여가 $ 6,000 미만인 그룹은 제외시키고 결과를 급여에 대한 내림차순으로 정렬하십시오.

select manager_id, min(salary) 
from employees    
WHERE manager_id IS NOT NULL      
GROUP BY manager_id      
HAVING MIN(salary) > 6000      
ORDER BY MIN(salary) DESC;

 



Q10. 각 부서에 대해 부서 이름, 위치, 사원 수, 부서 내 모든 사원의 평균 급여를 표시하는 질의를 작성하고, 열 레이블을 각각 Name, Location, Number of People 및 Salary로 지정하십시오. 평균 급여는 소수점 둘째 자리로 반올림하십시오.

select department_name as 'Name', location_id as 'Location', count(*) as 'Number of People', 
round(avg(salary), 1) as Salary 
from employees join departments
using(department_id)
group by department_name;

 



Q11. 총 사원 수 및 2005, 2006, 2007, 2008년에 입사한 사원 수를 표시하는 질의를 작성하고 적합한 열 머리글을 작성하십시오.

select count(*) TOTAL,
sum(if(hire_date like '2005%', 1, 0)) '2005%',
sum(if(hire_date like '2006%', 1, 0)) '2006%',
sum(if(hire_date like '2007%', 1, 0)) '2007%',
sum(if(hire_date like '2008%', 1, 0)) '2008%'
from employees;

 


Q12. 업무를 표시한 다음 해당 업무에 대해 부서 번호별 급여 및 부서 20, 50, 80 및 90의 급여 총액을 각각 표시하는 행렬 질의를 작성하고 각 열에 적합한 머리글을 지정하십시오.

select job_id,
sum(case department_id when 20 then salary end) Dept20,
sum(case department_id when 50 then salary end) Dept50,
sum(case department_id when 80 then salary end) Dept80,
sum(case department_id when 90 then salary end) Dept90,
sum(salary) Total
from employees
group by job_id;

'MySQL은 좀 낫다면서요' 카테고리의 다른 글

MySQL #Ch6.서브쿼리 : 연습문제  (0) 2021.06.17
MySQL #함수  (0) 2021.06.17
MySQL #CH4. Join : 연습문제  (0) 2021.06.16
MySQL #조인(Join)  (0) 2021.06.16
MySQL #CH2. Select : 연습문제  (0) 2021.06.15
지역변수vs 전역변수

 

지역변수? 지역구! 즉, 함수 내에서 선언하여 그 함수 내에서만 사용가능한 변수이다.

전역변수? 전역구! 즉, 함수 밖에서 선언하여 파일 내 모든 함수에서 사용 가능한 변수이다.

 

num=10   #전역변수
def f1():
    num=20   #지역변수. 저장하는 메모리가 전역과 서로 다르기때문에 에러안남.
    print('f1:',num)

def f2():
    x=5
    print('f2 x:',x)
    print('f2 num:', num)

def main():
    print('main num:', num)
#    print('main x:', x)  : 다른 함수의 지역변수 사용불가가
    f1()
    f2()
    print('main num:', num)

main()   #메인함수 먼저 출력

out)

 

 

그런데 코딩을 짜다보니 전역변수를 바꾸고 싶다면?

그럴 때는 함수 내에서 global <변수> 를 지정해주면 되지롱~

 

num=10   #전역변수
def f1():
    global num  #num을 전역변수로 지정(즉, 전역변수 수정).
    num=20   #지역변수. 저장하는 메모리가 전역과 서로 다르기때문에 에러안남.
    print('f1:',num)

def f2():
    num=15
    x=5
    print('f2 x:',x)
    print('f2 num:', num)

def main():
    print('main num:', num)
#    print('main x:', x)  : 다른 함수의 지역변수 사용불가가
    f1()
    f2()
    print('main num:', num)

main()   #메인함수 먼저 출력

out)

 

 

근데 왜 global을 써도 에러가 뜨는거지...? (멘붕)

 Q. 연산할 숫자 2개와 사칙연산자 한개를 입력받는 계산기를 만들어보자.

 

def 더하기(a, b):
    c = a+b
    return c    #return a+b 랑 같은 뜻

def 빼기(a, b):
    return a-b

def 곱하기(a, b):
    return a*b

def 나누기(a, b): #파이썬은 함수에서 아무값도 반환하지 않으면 None객체 전달됨
    if b !=0:
        return a/b

x=int(input('x='))    #계산할 숫자1
y=int(input('y='))    #계산할 숫자2
res = None     #계산 결과 담을 변수
op = input('사친연산(+, -, *, /):')   #이항연산자

if op == '+':
    res = 더하기(x,y)
elif op == '-':
    res = 빼기(x, y)
elif op == '*':
    res = 곱하기(x, y)
elif op == '/':
    res = 나누기(x, y)

if res == None:     #0으로 나누면 안되기 때문에 따로 None을 잡아줌
    print('잘못된 수식')
else:
    print(x, op, y, '=', res)

out)

 

*사칙연산에서는 0으로 나누게 되면 오류가 발생하기 때문에 res == None 이라는 변수를 미리 잡아주어 연산 오류가 나는 것을 막아준다!

 

 

def 더하기(a, b):
    c = a+b
    return c    #return a+b 랑 같은 뜻

def 빼기(a, b):
    return a-b

def 곱하기(a, b):
    return a*b

def 나누기(a, b): #파이썬은 함수에서 아무값도 반환하지 않으면 None객체 전달됨
    if b !=0:
        return a/b
    else :
        print('잘못된 수식')

x=int(input('x='))    #계산할 숫자1
y=int(input('y='))    #계산할 숫자2
op = input('사친연산(+, -, *, /):')   #연산자

if op == '+':
    res = 더하기(x,y)
    print(x, op, y, '=',res)
elif op == '-':
    res = 빼기(x, y)
    print(x, op, y, '=',res)
elif op == '*':
    res = 곱하기(x, y)
    print(x, op, y, '=',res)
elif op == '/':
    res = 나누기(x, y)
    print(x, op, y, '=',res)

out)

 

res = None 을 알지 못했을 때, if문으로 출력하려고 잡았던 코드.

if문이 잘 돌아가기는 하는데 마지막 줄 5 / 0 = None 이 출력되는 것이 아쉽다.

마지막 줄이 안나오게 수정할 방법이 없는건가?

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #함수(3)  (0) 2021.06.04
python #함수(2) 예제.약수구하기  (0) 2021.06.04
python #함수  (0) 2021.06.04
python #dictionary  (0) 2021.06.03
python # set  (0) 2021.06.03
함수

 

가장 간락현 코딩은 앞에서 봤던 변수, 연산자, 제어문들을 이용해서 루트를 짜는 것이다.

그런데 계속해서 코드가 반복적으로 나온다면 기본적인 변수들만으로는 번거롭고 귀찮다.

그래서 리스트나 함수를 이용하면 조금 더 간편하게 코드 작성이 가능한데 오늘은 함수에 대해서 정리해보자! 

 

 

함수는, 자주 사용하는 코드를 반복적으로 작성하지 않고 모듈화해서 필요할 때 호출해서 반복사용하는 방법이다.

프로그램의 입작으로는 하나의 기능을 구현하는 것이다.

 

 

1.함수사용방법

 1)함수정의

   def 함수명(파라미터들(매개변수):

  실행문1

  실행문2

 

 파라미터 : 매개변수

만약 함수가 2x+1 이고 파라미터가 0, 1,2 이면

리턴값(결과물)은 각각 1, 3, 5 이다. (파이썬은 리턴값 갯수의 제약이 없다.)

 

 2)함수호출

  함수를 불러옵니다.

  만약 함수에 파라미터가 있다면 호출시 그 값을 넣어줍니다.

 

   res = add(1,2)   #add() 함수 호출

   print(res)

 

함수를 호출하면 그 함수로 점프한다.

 

 

#함수 정의

def hello():  #hello라는 함수 정의. 파라미터는 아무것도 없다. 리턴도 없음.
    print('hello')

def add(x, y):    #x, y는 파라미터
    return x+y

def gugu(dan):  #파라메터로 구구단 한 단을 출력하는 함수를 만드시오.
    print('<', dan, '단>')
    for i in range(1, 10):
        print(dan, '*', i, '=' , dan*i)


#함수 호출
hello()
res = add(1,2)   #호출 시 파라메터에 넣어주는 값을 아규먼트(인자).
print(res)

gugu(4)

 

out)

hello

3

< 4 단>
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

 

 

그럼 추가 예제!

구구단을 2단부터 9단까지 출력하고 싶다면?

 

def gugu(dan):  #파라메터로 구구단 한 단을 출력하는 함수를 만드시오.
    print('<', dan, '단>')
    for i in range(1, 10):
        print(dan, '*', i, '=' , dan*i)
        

for i in range(2,10):       #출력에서 for문 사용하여 단을 늘려준다!
    gugu(i)

def에 단을 바꾸는 반복문을 정의해주는 것이 아니라 출력문에서 써줘도 된다!!! 언빌리버블!

 

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #함수(2) 예제.약수구하기  (0) 2021.06.04
python #함수(2) - 예제. 계산기  (1) 2021.06.04
python #dictionary  (0) 2021.06.03
python # set  (0) 2021.06.03
python #list(3)  (0) 2021.06.03

+ Recent posts