쿼리를 어떻게 해야 할까요?

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
쿼리를 어떻게 해야 할까요?

QA

쿼리를 어떻게 해야 할까요?

본문

2049095940_1646352837.7764.jpg

 

mysql db에는 위 처럼 테이블에 데이터가 입력이 되어 있습니다. 

제가 하고 싶은 것은 expt_date별로 강사별 강의수를 세고 싶습니다.

즉 

날짜          발롱블루강사 갯수    김프로강사 갯수           

2022-05-02,        60,                  25

2022-05-15,        5,                    0

2022-05-17,        1,                    0

2022-05-29,        1,                    0

2022-05-30,        1,                    0

 

이렇게 나오게 하고 싶습니다.

쿼리를 어떻게 하면 될까요?

 

 

이 질문에 댓글 쓰기 :

답변 4

이렇게 쿼리 한번 해보실랍니까유~~~

 


SELECT expt_date
    , sum(case when (teacher_text = '발롱블루' OR pac_teacher = '발롱블루') then 1
    else 0 end) as "발롱블루"
    , sum(case when (teacher_text = '김프로' OR pac_teacher = '김프로') then 1
    else 0 end) as "김프로"
FROM s_mystudy_exptdate 
WHERE expt_date LIKE '2022-05%' 
 GROUP BY expt_date
 ORDER BY expt_date asc

강사가 두명이면 쿼리로 어떻게 되겠지만

그 이상이면

select 날짜, 강사, count(강사) from table group by 날짜, 강사 

이렇게 하는게 정석이죠

SELECT expt_date,

sum( if( teacher_text = '발롱블루' OR pac_teacher = '발롱블루', 1, 0) teacher1,

sum( if( teacher_text = '발롱블루2' OR pac_teacher = '발롱블루2', 1, 0) teacher2,

...
 FROM s_mystudy_exptdate 
 WHERE expt_date LIKE '2022-05%' 
 GROUP BY expt_date

다시 질문합니다. 

SELECT SQL_CALC_FOUND_ROWS expt_date, lecture_no, SUM(IF(lecture_no != '',1,0)) as lec_cnt, teacher_text, pac_teacher, package_no, SUM(IF(package_no != '', 1, 0)) as pack_cnt FROM s_mystudy_exptdate WHERE expt_date LIKE '2022-05%' GROUP BY lecture_no, package_no ORDER BY expt_date
하면 

2038888892_1646873629.3268.png

이렇게 나옵니다. 

이것을 2022-05 월별로 나오도록 하고 싶습니다. 

 

날짜           lecture_no1 lec_cnt1     lecture_no2  lec_cnt2    lecture_no3   lec_cnt3  package_no1 pack_cnt1 package_no2 pack_cnt2 package_no3 pack_cnt3 

2022-05     81,50, 173,3, 69,1, 144,1, 187,1, 172,11 (여기까지는 lecture_no, lec_cnt가 반복된것이고)

               13,1, 12,3, 17,1 16,1, 14,3 18,4, 20,14, 22,1 (여기는  package_no, pack_cnt가 반복된 것입니다.) 

 

이런식으로 항목을 lecture_no, lec_cnt, package_no, pack_cnt갯수만큼 반복해서 나오게 할수 있을까요?

그리고 lecture_no와 lec_cnt, package_no, pack_cnt 에는 각각의 lecture_no, lec_cnt, package_no, pack_cnt 값이 들어가는게 SQL문으로 가능하까요?
아니면 배열로 만들어서 처리를 해야 할까요?

 

SELECT  group_concat( concat(lecture_no,':', lec_cnt) SEPARATOR ', ') lecture,

            group_concat( concat( package_no,':', pack_cnt) SEPARATOR ', ') package

 FROM s_mystudy_exptdate

 WHERE expt_date LIKE '2022-05%'

 

SQL_CALC_FOUND_ROWS 사용을 다음을 참고하세요.

https://blog.asamaru.net/2015/09/11/using-sql-calc-found-rows-and-found-rows-with-mysql/

답변을 작성하시기 전에 로그인 해주세요.
전체 126,530 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT