안녕하세요
데이터가 없어도 해당날짜에 값이 찍히게 하는 쿼리를 만들고 싶습니다.(mysql)
테이블
날짜 | 상점 | 결제액 |
2017. 9. 1 | 미니미 | 1000 |
2017. 9. 1 | 미니미 | 1000 |
2017. 9. 3 | 미니미 | 1000 |
2017. 9. 4 | 미니미 | 1000 |
2017. 9. 5 | 미니미 | 1000 |
2017. 9. 1 | 즈 | 2000 |
2017. 9. 3 | 즈 | 2000 |
2017. 9. 5 | 즈 | 2000 |
2017. 9. 5 | 즈 | 2000 |
결과값
날짜 | 상점 | 총결제액 |
2017. 9. 1 | 미니미 | 2000 |
2017. 9. 3 | 미니미 | 1000 |
2017. 9. 4 | 미니미 | 1000 |
2017. 9. 5 | 미니미 | 1000 |
2017. 9. 1 | 즈 | 2000 |
2017. 9. 3 | 즈 | 2000 |
2017. 9. 4 | 즈 | 0 |
2017. 9. 5 | 즈 | 4000 |
조인 걸면 될 것도 같은데 생각처럼 쉽게 안나오네요
감사합니다.
WITH t AS ( SELECT '2017. 9. 1' dt, '미니미' nm, 1000 amt FROM dual UNION ALL SELECT '2017. 9. 1', '미니미', 1000 FROM dual UNION ALL SELECT '2017. 9. 3', '미니미', 1000 FROM dual UNION ALL SELECT '2017. 9. 4', '미니미', 1000 FROM dual UNION ALL SELECT '2017. 9. 5', '미니미', 1000 FROM dual UNION ALL SELECT '2017. 9. 1', '즈' , 2000 FROM dual UNION ALL SELECT '2017. 9. 3', '즈' , 2000 FROM dual UNION ALL SELECT '2017. 9. 5', '즈' , 2000 FROM dual UNION ALL SELECT '2017. 9. 5', '즈' , 2000 FROM dual ) -- Oracle SELECT a.dt , b.nm , NVL(b.amt, 0) FROM (SELECT DISTINCT dt FROM t) a LEFT OUTER JOIN (SELECT dt, nm , SUM(amt) amt FROM t GROUP BY dt, nm ) b PARTITION BY (b.nm) ON a.dt = b.dt ORDER BY nm, dt ;
-- MySQL SELECT a.dt , b.nm , IFNULL(c.amt, 0) amt FROM (SELECT DISTINCT dt FROM t) a CROSS JOIN (SELECT DISTINCT nm FROM t) b LEFT OUTER JOIN (SELECT dt, nm , SUM(amt) amt FROM t GROUP BY dt, nm ) c ON a.dt = c.dt AND b.nm = c.nm ORDER BY nm, dt ;