날짜값 시간별로 데이터 합치기 0 2 1,766

by 신제트 [MySQL] [2022.09.28 16:01:38]


날짜별로 시간별 데이터를 받아옵니다.

SELECT count(idx) as cnt, DATE_FORMAT(FROM_UNIXTIME(cudate), '%Y-%m-%d %H') regday FROM test where cugdate >= unix_time('2022-07-30') AND cugdate <= unix_time('2022-08-01') GROUP BY regday

 

+-----+---------------+
| cnt | regday        |
+-----+---------------+
| 114 | 2022-07-30 00 |
| 113 | 2022-07-30 01 |
|  45 | 2022-07-30 02 |
|  51 | 2022-07-30 03 |
|  32 | 2022-07-30 04 |

| 140 | 2022-07-31 00 |
| 101 | 2022-07-31 01 |
|  76 | 2022-07-31 02 |
|  31 | 2022-07-31 03 |
|  31 | 2022-07-31 04 |
 

이런식으로 값이 들어온다고 할때 같은 시간끼리 더해서 값을 합쳐주고 싶습니다

원하는 값 2022-07-30 의 00 시와 2022-07-31의 00시 2022-08-01 의 00시 ... 등등 같은시간값들을

합쳐주고 싶은데 방법이 있을까요? 마찬가지로 01시 끼리 02시끼리~~ 23시끼리 까지 다 합쳐주고싶습니다 

ex) 위의값대로한다면 2022-07-30  00->114 2022-07-31 00->140 을 합쳐서 254가 나오게하고싶습니다

코딩으로 처리해야하는 부분인지 쿼리로 가능한지 가능하다면 방법을 알려주시면 감사하겠습니다.

 

by 마농 [2022.09.28 16:36:38]

1. 집계 기준을 바꾸면 됩니다.
- 현재 : 년월일시 ('%Y-%m-%d %H')
- 수정 : 시 ('%H')
2. 함수가 unix_time 맞나요?
- unix_timestamp 아닌가요?
= 오타인지? 아니면 사용자함수를 따로 만든 것인지?
3. 조회 기준이 모호합니다.
- 2022-08-01 을 포함시키려면 다음과 같이 조건을 줘야 합니다.
- 수정전 : AND cugdate <= unix_timestamp('2022-08-01')
- 수정후 : AND cugdate < unix_timestamp('2022-08-02')
4. 표준 쿼리 사용 권장
- Select 절의 별칭 regday 를 동일레벨의 GROUP BY 절에서 사용하는 것은 원칙적으로 안됩니다.
- MySQL 에서만 허용되는 비표준 구문입니다.
- 별칭 주기 전의 원래의 표현식 그대로를 GROUP BY 에 사용하거나
- 별칭 쿼리를 인라인뷰로 감싸서 밖에서 GROUP BY 하거나


by 신제트 [2022.09.28 16:42:26]

1. 바로나오네요 감사합니다!!

2. 잘못썼습니다.

3. 알겠습니다 감사합니다!

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