9월 15일

Yullgiii·2023년 9월 15일
0
post-thumbnail

ADsP

오늘은 왜인지 문제가 술술 풀려서 2회차를 풀었다. 아침부터 일찍 일어나 한것이 도움이 된듯하다.

내일 배움 캠프

오늘은 어제 들은 SQL 3주차에 이어 4주차로 마무리 해볼 생각이다!

SQL

Subquery(서브쿼리)의 사용 방법을 배워 볼것이고
실전에서 유용한 SQL 문법들에 대해서도 배울것이다.

Subquery

하나의 SQL 쿼리 안에 또다른 SQL 쿼리

위의 쿼리작성을

이런식으로 바꾸며 두개의 쿼리를 하나로만든다!!!!!!!

각 분야별로 쓰이는 서브쿼리
Subquery는 where, select, from 절에서 유용하게 사용될 수 있다

where 절은 위에서 앞서서 테스트 해보았다.

select 절 이용

from 절에 사용(가장많이 이용됨!!!!!!!!!!)

서브쿼리 연습해보기!!!

Where 절에 들어가는 Subquery 연습해보기

연습] 전체 유저의 포인트의 평균보다 큰 유저들의 데이터 추출하기

연습] 이씨 성을 가진 유저의 포인트의 평균보다 큰 유저들의 데이터 추출하기

위와 같은 결과지만 다른방법!!!

Select 절에 들어가는 Subquery 연습해보기

연습] checkins 테이블에 course_id별 평균 likes수 필드 우측에 붙여보기

연습] checkins 테이블에 과목명별 평균 likes수 필드 우측에 붙여보기

From 절에 들어가는 Subquery 연습해보기

준비1] course_id별 유저의 체크인 개수를 구해보기!

준비2] course_id별 인원을 구해보기!

진짜 하고 싶은 것] course_id별 like 개수에 전체 인원을 붙이기

한 걸음 더] 퍼센트를 나타내기

이 정도만 추가해도 가능!!!!!!!!!

반 걸음 더] 앗, 강의 제목도 나타나면 좋겠네요!

이렇게 완성한 결과값은

!!!!!!!!!!!!!!!

with절 연습하기

with 절로 더 깔끔하게 쿼리문을 정리하기

SELECT c2.title , a.cnt_checkins, b.cnt_total, (a.cnt_checkins/b.cnt_total) as ratio From
	(
	SELECT  c.course_id, 
		count(DISTINCT(user_id)) 
		as cnt_checkins FROM checkins c 
		group by c.course_id 
		) a
INNER JOIN 
	(
	select 	course_id,
		count(*) 
		as cnt_total from orders o
		group by o.course_id
		) b
on a.course_id =b.course_id
INNER JOIN courses c2
on c2.course_id = a.course_id

위 코드를 with 로 정리

with table1 as(		
		SELECT  c.course_id, 
		count(DISTINCT(user_id)) 
		as cnt_checkins FROM checkins c 
		group by c.course_id 
), table2 as (	
		select 	course_id,
		count(*) 
		as cnt_total from orders o
		group by o.course_id
)
SELECT c2.title , a.cnt_checkins, b.cnt_total, (a.cnt_checkins/b.cnt_total) as ratio 
From table1 a
INNER JOIN table2 b
on a.course_id =b.course_id
INNER JOIN courses c2
on c2.course_id = a.course_id

(주의사항 table을 지정해줘도 a,b,부분은 놔둬야함)

실전압축근육 SQL

문자열

문자열 쪼개보기

뜻 : substring_index를 통해서 @을 기준으로 email을 쪼개는데 앞에것만 보여줘!

문자열 일부만 출력하기

select substring(created_at,1,10) as date, count(*) as cnt_date from orders
group by date

//뜻: created_at을 시작글자 1 부터 10번 까지 date 로 표시해주고 날짜별로 묶어서 갯수를 세어줘

Case

CASE: 경우에 따라 원하는 값을 새 필드에 출력해보기

CASE: 실전을 위한 트릭!

주차 정리 퀴즈

퀴즈] 평균 이상 포인트를 가지고 있으면 '잘 하고 있어요' / 낮으면 '열심히 합시다!' 표시하기!

퀴즈] 이메일 도메인별 유저의 수 세어보기

퀴즈] '화이팅'이 포함된 오늘의 다짐만 출력해보기

퀴즈] 수강등록정보(enrolled_id)별 전체 강의 수와 들은 강의의 수 출력해보기

(띄워쓰기랑 문법좀 제발 주의....에러 겁나 뜨네...)

퀴즈] 수강등록정보(enrolled_id)별 전체 강의 수와 들은 강의의 수, 그리고 진도율 출력해보기

함께] 그러나, 더 간단하게 만들 수 있지 않을까!

select enrolled_id,
       sum(done) as cnt_done,
       count(*) as cnt_total
from enrolleds_detail ed
group by enrolled_id

done 이 1이기 때문에 1을 더한것이나 갯수를 세어준것이나 같기떄문에 훨씬 간단히 답을 얻을수있는 문제였다....

강의 완료!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

회고

4주차까지의 강의를 4일만에 들었다는것은 복습이 필수라는것이다
어느정도 이해는 되지만 내가 스스로 문법들을 좀 정리하고 한곳에 몰아둘 필요성을 느끼고 있다.

Java

자 가보자고...강의....자바....클래스에 대해서 한번 더 들어봐야겠다.

클래스 필드와 메소드

  • 클래스(정적 static) 요소: 메모리 중 한 곳만 차지
  • 인스턴스 요소들: 각각이 메모리에 자리를 차지
    • 각각의 자신만의 프로퍼티 값을 가지고 있음


예제로 버튼!@!!!!!!

접근제어자!!

  • 다른 누군가가 쓰게 할 클래스 : 구성요소 중 일부만 밖으로 공개
    - 사용중 오용이나 혼란을 방지
    - ⭐ 캡슐화 encapsulation
접근 가능publicprotecteddefaultprivate
해당 클래스 안에서
동일 패키지 안에서
동일 패키지 또는 자손 클래스 안에서
다른 패키지 포함 어느 곳에서든

위 표는 댑따 중요!!!!

클래스의 특정 요소를 감추는 이유

  • ‘감추는’ 것이 아님 - 코드로 확인 가능
    • 라이브러리 예시 확인
    • 폰도 부숴서 확인할 수 있듯이…
  • 작성자의 의도대로 사용하도록 하기 위함
    • 쓰라고 의도한 기능만 공개(IDE의 자동완성 등)하여 혼란 방지
      • 내부적으로 수많은 필드들이 사용된다면?
      • 제한이 오히려 편의를 제공
    • 필드에 부적절한 값이 적용되는 등의 오용 방지
    • 다른 클래스와 복합적으로 사용될 경우 혼선 방지
      • 스마트폰 - PC 연결은 USB 케이블로만…
  • 기타 다양한 이유


클래스를 만든 사람의 의도대로 접근하는 법 밖에 없음
오용과 어려움이 없이 편의를 위해서 이용함

public class Product {

    private static double discount = 0.2;
    private static double increaseLimit = 1.2;

    private String name;
    private int price;
}
에서 ⌘+N!!!!!!

하고 나면!!!


public class Product {

    private static double discount = 0.2;
    private static double increaseLimit = 1.2;

    private String name;
    private int price;

    public static double getDiscount() {
        return discount;
    }

    public static void setDiscount(double discount) {
        Product.discount = discount;
    }

    public static double getIncreaseLimit() {
        return increaseLimit;
    }

    public static void setIncreaseLimit(double increaseLimit) {
        Product.increaseLimit = increaseLimit;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

굳이 이렇게 하는 이유!!!! 고정값을 수정할수 없게 하기 위해서

회고

오늘 강의도 알차다,...앞서 이야기 한데로 이번 부분은 빠짐없이 빡세게 해야하는것들이라 조금 힘든 느낌도 있지만서도 재미있어진다.
다행스럽게도 너무 힘들지는 않고 조금씩 이해하며 하고있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글