mysql 일자별 합 쿼리 문의 0 3 1,196

by 요궁 [MySQL] mysql 일자별 합 [2016.06.16 19:19:34]


mysql문의 드립니다.  현재 데이터는  아래 형태입니다.

+------+----------+-------+
| name |   date   | score |
+------+------------------+
| Bob  | 20160101 |    75 |
| Bob  | 20160101 |    77 |
| Bob  | 20160102 |    78 |
| Bob  | 20160102 |    80 |
| Sue  | 20160103 |    90 |
| Sue  | 20160104 |    97 |
| Sue  | 20160106 |    98 |
| Sue  | 20160103 |    99 |
...
...
| kok  | 20160101 |    99 |
+------+----------+-------+

데이터는 약 100만건 정도 입니다.

위형태에서 아래 구조데이터를 뽑아야 합니다.

+------+----------------+--------------+-------------+-------------+-------------+
| name | 20160101(sum)  | 20160102(sum)| 20160103    |  20160104   |20160105(sum)|
+------+----------------+--------------+-------------+-------------+-------------+
|  Bob |       152      |    158       |     0       |    0        |      0      |
|  Sue |       0        |      0       |     90      |    97       |      0      |
|  kok |       99       |    0         |     0       |    0        |      0      |
+------+----------------+--------------+-------------+-------------+-------------+

name의 경우에는 group by를 이용하면 될꺼같은데

가로 날자 컬럼의 경우에는 항상 변동이 됩니다. 그래서 다이나믹쿼리를 이용하여 

컬럼은 반복하려 합니다.

어떻게 뽑으면 가능할지요??

 

by 마농 [2016.06.17 08:58:53]
SELECT name
     , IFNULL(SUM(CASE date WHEN '20160101' THEN score END), 0) "20160101"
     , IFNULL(SUM(CASE date WHEN '20160102' THEN score END), 0) "20160102"
     , IFNULL(SUM(CASE date WHEN '20160103' THEN score END), 0) "20160103"
     , IFNULL(SUM(CASE date WHEN '20160104' THEN score END), 0) "20160104"
     , IFNULL(SUM(CASE date WHEN '20160105' THEN score END), 0) "20160105"
  FROM t
 WHERE date BETWEEN '20160101' AND '20160105'
 GROUP BY name
;

 


by 요궁 [2016.07.04 18:29:30]

마농님 감사합니다 ^^ 배워가네요


by drakula [2016.07.05 14:08:42]

대단하시네요~ MySQL 까지 섭렵하고!!!!!! 최고에요^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입