집계 함수 (aggregation func)
- count() : 해당 열의 레코드 개수
SELECT COUNT(DISTINCT col1) // 중복 제거한 결과를 카운트
COUNT(*) : NULL을 포함해서 카운트
COUNT(col) : NULL을 포함하지 않고 카운트
- sum() : 해당 열 값의 합계
- avg(): 해당 열 값의 평균
- min() / max() : 해당 열 값의 최소/최대
- variance() / stddev() : 해당 열의 분산/표준편차
GROUP BY
select에 들어가는 항목을 그룹화해서 조회
<aside> ⭐ GROUP BY를 사용할 경우, GROUP BY에서 지정하지 않은 컬럼을 SELECT에 집계 함수 없이 사용하면 부정확한 값이 나온다. → 그런 컬럼들엔 반드시 집계함수 사용하기!
</aside>
// Good
select brand, min(cost)
from `thelook_ecommerce.products`
group by brand;
// Bad
select brand, cost
from `thelook_ecommerce.products`
group by brand;
GROUP BY가 필요한 경우, 필요 없는 경우?
GROUP BY가 없다면 전체 집계, GROUP BY 가 있는 경우 해당 그룹 별 집계를 수행한다.
따라서 전체 집계의 경우에만 GROUP BY를 적지 않아도 된다.
select country, count(id)
from `thelook_ecommerce.users`
group by country;
필터링 순서
where → group by → having → select → order by → limit
기타
WHERE 연산자
= : 같음
<> 또는 != : 같지 않음
NULL 값의 경우 IS NULL, IS NOT NULL 사용
WHERE col1 IS NULL;
WHERE col2 IS NOT NULL;
문자열 연결
- concat()
- 연결 연산자 ||
select concat('hello', '-', 'world'); // hello-world
select 'hello'||'world'; // helloworld
IFNULL
해당 expressiont이 NULL 인 경우 대체값을 반환한다.
IFNULL(expression, alternate_value)
문자열 뿐만 아니라, 다른 데이터 타입에도 사용 가능
// USERS 테이블에서 name이 없는 경우 익명으로 출력
SELECT IFNULL(name, '익명')
FROM USERS;
SELECT IFNULL(NULL, 0);
IF 와 IS NULL 로 구현 가능
SELECT
IF(IS NULL(NAME), "익명", NAME)
FROM USERS;
형 변환
CAST(), CONVERT() 함수를 사용해서 타입을 변환한다.
문자열 → 숫자
CAST([데이터] AS [타입명])
CAST("10" AS INT64)
CAST("10.123" AS FLOAT64)
CAST("10" AS NUMERIC)
CAST("10.123" AS NUMERIC)
숫자 → 문자열
CAST(10 AS STRING)
CAST(10.123 AS STRING)
// BOOL -> 문자열
CAST(true AS STRING)
CAST(false AS STRING)
// NULL -> 문자열
CAST(NULL AS STRING)
날짜로 변환은 DATE(), DATETIME() 함수를 사용한다.
DATE('2023-05-23')
DATETINE('2023-05-23 11:12:34')
'CS > Backend' 카테고리의 다른 글
[MySQL] WINDOW 함수 (0) | 2023.05.26 |
---|---|
[MySQL] JOIN (0) | 2023.05.26 |
[Java] Generic, 제네릭 (0) | 2023.05.26 |
[Java] 추상 클래스, 인터페이스 (0) | 2023.05.26 |
[MySQL] EXTRACT(part FROM date) (0) | 2023.05.26 |