반응형
다음과 같이 사용자 테이블에 월별 레코드를 가져 오는 쿼리를 작성했습니다.
SELECT COUNT( `userID` ) AS total, DATE_FORMAT( `userRegistredDate` , '%b' ) AS
MONTH , YEAR( `userRegistredDate` ) AS year
FROM `users`
GROUP BY DATE_FORMAT( FROM_UNIXTIME( `userRegistredDate` , '%b' ) )
산출:
total MONTH year
---------------------------
3 May 2013
2 Jul 2013
--------------------------
예상 출력 :
total MONTH year
---------------------------
0 Jan 2013
0 Feb 2013
0 Mar 2013
0 Apr 2013
3 May 2013
0 Jun 2013
2 Jul 2013
--------------------------
데이터가 없어도 기록을 보여줘야합니다. 어떻게하나요?
해결 방법
다른 방법에 대해 테스트하지 않았기 때문에 효율성에 대해 많이 말하지 않을 것이지만 임시 테이블이 없으면 이것은 공정한 방법으로 보입니다.
SELECT COUNT(u.userID) AS total, m.month
FROM (
SELECT 'Jan' AS MONTH
UNION SELECT 'Feb' AS MONTH
UNION SELECT 'Mar' AS MONTH
UNION SELECT 'Apr' AS MONTH
UNION SELECT 'May' AS MONTH
UNION SELECT 'Jun' AS MONTH
UNION SELECT 'Jul' AS MONTH
UNION SELECT 'Aug' AS MONTH
UNION SELECT 'Sep' AS MONTH
UNION SELECT 'Oct' AS MONTH
UNION SELECT 'Nov' AS MONTH
UNION SELECT 'Dec' AS MONTH
) AS m
LEFT JOIN users u
ON MONTH(STR_TO_DATE(CONCAT(m.month, ' 2013'),'%M %Y')) = MONTH(u.userRegistredDate)
AND YEAR(u.userRegistredDate) = '2013'
GROUP BY m.month
ORDER BY 1+1;
날짜 형식을 기반으로 유니온을 만들면 작업을 줄이고 쿼리에 대한로드를 줄일 수도 있습니다.
SELECT COUNT(u.userID) AS total, DATE_FORMAT(merge_date,'%b') AS month, YEAR(m.merge_date) AS year
FROM (
SELECT '2013-01-01' AS merge_date
UNION SELECT '2013-02-01' AS merge_date
UNION SELECT '2013-03-01' AS merge_date
UNION SELECT '2013-04-01' AS merge_date
UNION SELECT '2013-05-01' AS merge_date
UNION SELECT '2013-06-01' AS merge_date
UNION SELECT '2013-07-01' AS merge_date
UNION SELECT '2013-08-01' AS merge_date
UNION SELECT '2013-09-01' AS merge_date
UNION SELECT '2013-10-01' AS merge_date
UNION SELECT '2013-11-01' AS merge_date
UNION SELECT '2013-12-01' AS merge_date
) AS m
LEFT JOIN users u
ON MONTH(m.merge_date) = MONTH(u.userRegistredDate)
AND YEAR(m.merge_date) = YEAR(u.userRegistredDate)
GROUP BY m.merge_date
ORDER BY 1+1;
참조 페이지 https://stackoverflow.com/questions/17916322
반응형
'MySql' 카테고리의 다른 글
MySQL 짧은 한 달 동안 MySQL DATE_FORMAT '% M'? (0) | 2020.12.26 |
---|---|
MySQL 왼쪽 외부 조인 with where 절-일치하지 않는 행 반환 (0) | 2020.12.26 |
MySQL Use of COUNT to display distinct records with more than 2 occurrences in MySQL (0) | 2020.12.26 |
MySQL C ++에서 mysql을 어떻게 사용할 수 있습니까? (0) | 2020.12.26 |
MySQL에서 행 수가 다른 두 테이블을 어떻게 조인 할 수 있습니까? (0) | 2020.12.26 |
댓글