디자이너의 사회생활

빅쿼리 시간 2 ,SUM, COUNT, DISTINCT, GROUUP BY, ORDER BY 본문

카테고리 없음

빅쿼리 시간 2 ,SUM, COUNT, DISTINCT, GROUUP BY, ORDER BY

heedoo 2023. 3. 22. 16:55

집계함수등을 쓸 때 결과의 컬럼명이 임의로 나오는데 ( 보통 f0 이런식) 컬럼이 여러개인 경우 정확하게 구분하기 위해서는 

집계결과에 출력되는 칼럼에 별명을 지정하는게 좋다.

명령어 as 를 쓴다. 컬럼명지정은  ` backtick 을 쓴다. 

as `별명`

(나중에 테이블에도 join 문법을 써서 붙여줄 수 있다.)

 

1. SUM() : 괄호안의 컬럼의 값을 더하는 함수. 키워드 - 합계, 총

2. COUNT() : 괄호안의 컬럼의 행 수를 세는 함수 괄호필요.  키워드- ~건수

3. DISTINCT : 중복없이 유니크한 값을 뽑을 때 사용 키워드 - 중복없이

괄호를 쓰지 않느다. (범위가 필요 없어서 일까 예를 들어 어디서부터 어디까지 더해라 ~ 컴퓨터에게 지정해주지 않아도 되어서?)

4. GROUP BY : ~별로 묶어서 정렬해야할 때 쓰는 명령어.  키워드 ~별

값을 구분해야하기 때문에 select에서 지정해야 한다! 

GROUP BY 명령어를 쓸때는 SELECT 절에서 선언한 컬럼들은 GROUP BY 에 모두 들어가야 한다. 

(GROUP BY 에 컬럼명을 하나하나 타이핑하는게 귀찮다면 선언한 순서의 숫자를 써도 된다. )

 

5. ORDER BY : ~ 순으로 정렬하세요. 키워드 정렬 !

명령문에서 가장 마지막에 실행한다.

6. Date()명령어 쓰는경우 아닌 경우 쿼리 결과 비교해보기

() 안의 컬럼의 값에서 날짜만 뽑는 명령어 ! 

 

SELECT DATE(PaymentDate) , COUNT(*) as CntofPayment

FROM `Payment`

GROUP BY PaymentDate

->이렇게 하면 년월일시분초 별로 그룹이 되기때문에 같은날에 결제일시가 각각 달라 같은 결제일에 많은 행이 생긴다. 

 

SELECT DATE(PaymentDate) , COUNT(*) as CntofPayment

FROM `Payment`

GROUP BY DATE(PaymentDate)

->  DATE() 명령어를 쓰면 결제일 기준으로 묶인다.



퀴즈
 
결제테이블에서 2023년 1월 동안의 일자(Date())별(gorup by) “결제완료”한 결제금액 합(SUM)유저고유(distinct) 수(COUNT)를 구하여 날짜순(ORDER BY) 으로 출력세요.
SELECT Date(paymentDate), sum(total_price) as`23년1월 일자별 결제금액` , count(distinct userSeq) as`usernum`
FROM `Payment`
where DATE(paymentDate) between"2023-03-01" and "2023-03-31" and paid_status='결제완료'
group by DATE(paymentDate)
order by 1
 
*order by  Date(paymentDate) 하면 오류가 난다.왜인지 모르겠음