1.1 이메일에서 아이디만
select SUBSTRING_INDEX(email, '@', 1) from users
결과값 : email에서 @ 앞부분만 출력
1.2. 이메일 도메인만
select SUBSTRING_INDEX(email, '@', -1) from users
결과값 : email에서 @ 뒷부분만 출력
2.1 orders 테이블에서 날짜까지 출력
select created_at,
substring(created_at,1,10) as date # created_at 값에서 첫번째부터 열번째까지 출력한 값을 date로
from orders
결과값 : creat_at 컬럼에서 10번째까지출력
2.2 일별로 주문 갯수 세기
select substring(created_at,1,10) as date,
count(*) as cnt_date from orders # 해당 date에 해당하는 전체 count값
group by date
결과값 : 해당하는 날짜에 count값 출력
1.1 경우에 따라 원하는 값 새 필드에 출력
select pu.point_user_id, pu.point,
case
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu;
결과값 :
1.2 subquery로 case로 통계 내기
select level, count(*) as cnt from
( # a라는 테이블 값을 임의로 생성해서
select pu.point_user_id, pu.point, level로 지정한 값을 group by 묶고
(case 묶은 level의 값을 count로 나타냄
when pu.point > 10000 then '1만 이상'
when pu.point > 5000 then '5천 이상'
else '5천 미만'
END) as level
from point_users pu
) a
group by level
서브쿼리 결과값 :
group by로 묶었을 때 통계값:
with절로 보기좋게 표현
with point_level as # alias와 비슷하게 사용
(
select pu.user_id, pu.point,
case
when pu.point > 10000 then '1만 이상'
when pu.point > 5000 then '5천 이상'
else '5천 미만'
end as level
FROM point_users pu
)
select level, count(*) as cnt from point_level
group by level