테스트 사이트 - 개발 중인 베타 버전입니다

쿼리를 어떻게 해야 할까요? 채택완료

다위 3년 전 조회 1,907

 

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개

채택된 답변
+20 포인트
3년 전

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

 

</p>

<p>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</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

다위
3년 전
감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

3년 전

다시 질문합니다. 

http://localhost/phpMyAdmin4/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/select.html" target="mysql_doc">SELECT SQL_CALC_FOUND_ROWS expt_date, lecture_no, http://localhost/phpMyAdmin4/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_sum" target="mysql_doc">SUM(http://localhost/phpMyAdmin4/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if" target="mysql_doc">IF(lecture_no != '',1,0)) as lec_cnt, teacher_text, pac_teacher, package_no, http://localhost/phpMyAdmin4/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_sum" target="mysql_doc">SUM(http://localhost/phpMyAdmin4/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if" target="mysql_doc">IF(package_no != '', 1, 0)) as pack_cnt FROM s_mystudy_exptdate WHERE expt_date http://localhost/phpMyAdmin4/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like" target="mysql_doc">LIKE '2022-05%' GROUP BY lecture_no, package_no ORDER BY expt_date
하면 

이렇게 나옵니다. 

이것을 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문으로 가능하까요?
아니면 배열로 만들어서 처리를 해야 할까요?

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

엑스엠엘
3년 전
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/

댓글을 작성하려면 로그인이 필요합니다.

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

3년 전

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

그 이상이면

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

이렇게 하는게 정석이죠

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

백수1995
3년 전
물고기를 주는게 대세인가 보군요..

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인