2017-12-12 8 views
0

지난 달의 매월 MySql 데이터베이스 결과 수를 계산하여 특정 달에 대한 기록이없는 경우 어떻게 계산합니까? 카운트? 예를 들어, 매월 발생하는 등록 건수를 계산하고, 등록이없는 곳에서도 결과를 포함하고 싶습니다.결과가 0 인 사용자를 포함하여 매월 계산 기록

 
    Month Count 
     1  4 
     2  2 
     .  . 
     .  . 
     6  0 
     .  . 
     .  . 
+0

추가 도움말 : [매우 간단한 SQL 쿼리 인 것처럼 보이는 이유는 무엇입니까?] (https://meta.stackoverflow.com/questions/333952/why-should-i) -provide-an-mcve-for-what-to-me-to-be-a-very-simple-sql-query) – Strawberry

답변

1

많은 답변이 있지만 대부분을 읽고 이해하기가 어려웠습니다. 이 작동 방법

select derived.mm as month, count(u.reg_date) as count from (
    SELECT 1 mm UNION ALL SELECT 2 UNION ALL SELECT 3 
    UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 
    UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 
    UNION ALL SELECT 12 
) derived 
left join user u 
on derived.mm = month(reg_date) 
    and u.reg_date > LAST_DAY(DATE_SUB(curdate(),INTERVAL 1 YEAR)) 
group by derived.mm 

그러나, 파생 테이블을 사용하여, 나는 그것이 우리가 사용자 테이블에서 지난 12 개월 동안 등록의 수를 계산하려고 아래 주어진 쿼리와 그렇게 쉽게 생각

  • 12 개월마다 1, 즉 1에서 12까지 12 행을 반환하는 테이블 (별칭 파생)을 가져옵니다. 2 행].
  • 등록 날짜의 월 번호와 주어진 파생 테이블의 해당 월 번호가 조인됩니다. [등록이 발생하지 않은 기간 동안 가입 된 reg_date 결과가 null 인 경우]
  • 그리고 절은 평소와 같이 지난 12 개월을 계산합니다. [현재 월은 12로 인덱싱됩니다]
  • 결과를 원래 월 인덱스로 그룹화합니다 .
  • 희망은 누군가를 도우려는 것입니다.

    +0

    응용 프로그램 코드의 데이터 표시 문제를 처리하는 것이 더 좋다고 생각합니다. – Strawberry

    +0

    정말 의존합니다. 문맥. 물론 응용 프로그램이이 논리를 처리 할 수 ​​있습니다. 그러나이 결과 집합의 첫 번째 열을 무시하고 두 번째 열만 가져 오는 경우 응용 프로그램 논리를 설정하기가 어려울 수 있습니다. – sbs

    +0

    응용 프로그램 논리는 간단합니다. – Strawberry