본문 바로가기

내배캠/TIL

24. 07. 26

SQL

HavingWhere의 차이

  • WHERE 절에서는 집계함수를 사용할 수 없다.
  • HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용한다.
  • HAVING 절은 GROUP BY 절과 함께 사용된다.
  • 결론 : WHERE 절의 경우 한 개의 ROW 별로 조건을 주는 문법이고 HAVING의 경우 GROUP BY 절에서 묶여진 그룹에서의 조건이다.

 

<예시 코드>

SELECT name, count(name)
from animal_ins
where name is not null
group by name
having count(name) >= 2
order by name

 


Limit

https://school.programmers.co.kr/learn/courses/30/lessons/59405

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 상위 N개 레코드 문제이다. 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 문제로, 

ORDER BY 컬럼명 LIMIT n 으로 구문을 작성하면 ORDER BY로 정렬한 데이터에서 상위 n개의 데이터를 조회할 수 있다.

가장 먼저 들어온 동물 1마리의 이름을 조회하는 문제이므로 LIMIT 1로 문제를 해결할 수 있다.

 

<정답>

SELECT name
from animal_ins
order by datetime limit 1

 

(또는)

 

select NAME 
from ANIMAL_INS 
where DATETIME = 
(
SELECT MIN(DATETIME) 
from ANIMAL_INS
)

 

 


 

Java

 

Enum

Enum이란?

관련이 있는 상수들의 집합으로, 어떤 클래스가 상수만으로 작성되어 있으면 class 선언 부분에 enum이라고 선언하여 '이 객체는 상수의 집합이다' 라는 것을 명시적으로 나타낼 수 있다. enum은 enumeration이라는 열거, 목록이라는 영어 단어의 앞부분을 따 만든 예약어이다.

 

Enum을 사용하는 이유

  • 코드가 단순해지며 가독성이 좋다.
  • 인스턴스 생성과 상속을 방지한다.
  • 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.
  • 열거체를 비교할 때 실제 값뿐만 아니라 타입까지도 체크한다.
  • 열거체의 상수값이 재정의되어도 다시 컴파일할 필요가 없다.

 

문법

enum 열거체이름 { 상수이름1, 상수이름2, ...}
enum Rainbow { 
    RED, 
    ORANGE, 
    YELLOW, 
    GREEN, 
    BLUE, 
    INDIGO, 
    VIOLET 
}

 

열거체이름.상수이름
Rainbow.RED

 

 

 

대표적인 Enum 메소드

메소드 설명
static E values() 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환함.
static E valueOf(String name) 전달된 문자열과 일치하는 해당 열거체의 상수를 반환함.
protected void finalize() 해당 Enum 클래스가 final 메소드를 가질 수 없게 됨.
String name() 해당 열거체 상수의 이름을 반환함.
int ordinal() 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환함.

 

 


 

Stream

 

문제 풀이

public class Main {
    public static void main(String[] args) {
        List<Book> bookList = Arrays.asList(
                new Book(1L, "모두의 딥러닝", "조태호", "IT", 21600),
                new Book(2L, "이득우의 게임 수학", "이득우", "IT", 40500),
                new Book(3L, "자바 웹 개발 워크북", "구멍가게 코딩단", "IT", 31500),
                new Book(4L, "실전 시계열 분석", "에일린 닐슨", "IT", 34200),
                new Book(5L, "데이터 분석가의 숫자유감", "권정민", "IT", 14400),
                new Book(6L, "스프링 부트 실전 활용 마스터", "그렉 턴키스트", "IT", 25200),
                new Book(7L, "오늘부터 IT를 시작합니다", "고코더", "IT", 16200),
                new Book(8L, "그림으로 이해하는 인지과학", "기타하라 요시노리", "IT", 16200),
                new Book(9L, "괜찮아, 그 길 끝에 행복이 기다릴 거야", "손미나", "여행", 17100),
                new Book(10L, "여행의 이유", "김영하", "여행", 12150),
                new Book(11L, "여행의 시간", "김진애", "여행", 16200),
                new Book(12L, "로봇 시대 살아남기", "염규현", "역사", 14850),
                new Book(13L, "경제 전쟁의 흑역사", "이완배", "역사", 15750),
                new Book(14L, "100가지 동물로 읽는 세계사", "사이먼 반즈", "역사", 29700),
                new Book(15L, "k 배터리 레볼루션", "박순혁", "경제", 17100),
                new Book(16L, "정하준의 경제학 레시피", "장하준", "경제", 16200),
                new Book(17L, "레버리지", "롭 무어", "경제", 16200)
        );

						
    }
}

class Book {
    // 분류번호
    private Long id;
    // 책 이름
    private String bookName;
    // 작가 이름
    private String author;
    // 카테고리
    private String category;
    // 가격
    private double price;

    public Book(Long id, String bookName, String author, String category, double price) {
        this.id = id;
        this.bookName = bookName;
        this.author = author;
        this.category = category;
        this.price = price;
    }

    public String getBookName() {
        return bookName;
    }

    public String getCategory() {
        return category;
    }

    public double getPrice() {
        return price;
    }

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

 

 

 

< 카테고리가 여행인 책 제목 조회 >

bookList.stream().filter(c -> c.getCategory().equals("여행"))
                .forEach(s -> System.out.println("카테고리가 여행인 책 제목 : " + s.getBookName()));

 

 

< 가격이 16200원 이하인 책 제목 조회 >

bookList.stream()
                .filter(c -> c.getPrice() <= 16200)
                .forEach(s -> System.out.println("가격이 16200원 이하인 책 제목 : " + s.getBookName()));

 

 

< 책 제목에 "경제"라는 용어가 들어간 책 제목 조회 >

bookList.stream()
                .filter(t -> t.getBookName().contains("경제"))
                .forEach(s -> System.out.println("제목에 '경제'라는 용어가 들어간 책 제목 : " + s.getBookName()));

 

 

< 가격이 가장 비싼 책 가격 조회 >

double maxPrice = bookList.stream().mapToDouble(Book::getPrice).max().getAsDouble();

 

 

< 카테고리가 IT인 책들의 가격 합 조회 >

double sum = bookList.stream().filter(c -> c.getCategory().equals("IT")).mapToDouble(Book::getPrice).sum();

 

 

< 카테고리가 IT인 책들의 가격을 40% 할인하여 새로운 책 리스트 만들기 >

List<Book> discountedBookList = bookList.stream().filter(c -> c.getCategory().equals("IT"))
                                                .peek(p -> p.setPrice(p.getPrice() * 0.6)).toList();

 

 

 

 

 

 

 

[참고자료]

https://www.nextree.co.kr/p11686/

 

Java: enum의 뿌리를 찾아서...

이번 글에서는 자바 1.5버전부터 새롭게 추가된 열거형 상수인 enum(enumeration)에 대해 알아보겠습니다. 열거형은 서로 연관된 상수들의 집합입니다. 이번 글은 enum 정의와 enum 사용방법, 그리고 enum

www.nextree.co.kr

https://www.tcpschool.com/java/java_api_enum#google_vignette

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'내배캠 > TIL' 카테고리의 다른 글

24. 07. 29  (0) 2024.07.29
24. 07. 27  (0) 2024.07.28
N의 약수 찾기 알고리즘  (0) 2024.07.25
Java 문법 종합반 4~5주  (0) 2024.07.24
Java 문법 종합반 1~3주  (6) 2024.07.23