Group by를 사용하여 하위 쿼리에서 집계 값 가져 오기

Mads Stenbjerre

12 개월, 24 개월, 36 개월 등의 고객 생존율 (즉, 활성 고객 수 / 총 고객 수)을 계산하려고합니다. 문제는 "총 고객"이 "최소한 테스트 기간만큼 오래된 고객"이어야한다는 것입니다 (예 : 최소 12 개월 전에 시작한 고객이 12 개월 후에도 여전히 활동중인 고객 수).

세 가지 관련 열이 있습니다.

  • PROD_CDE = 제품 라인
  • START_DATE = 시작일
  • END_DATE = 출발일

그리고 다음 코드를 시도했습니다.

select PROD_CDE, 
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 11) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 11) AS survival_12m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 23) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 23) AS survival_24m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 35) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 35) AS survival_36m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 47) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 47) AS survival_48m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 59) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 59) AS survival_60m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 71) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 71) AS survival_72m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 83) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 83) AS survival_84m,
    (SELECT sum(CASE WHEN (TIMESTAMPDIFF(MONTH, START_DATE, END_DATE) > 95) then 1 else 0 END)/count(START_DATE) where TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 95) AS survival_96m
from TABLENAME 
where START_DATE >= '2011-01-01' 
group by PROD_CDE; 

이 오류 메시지가 나타납니다.

Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'local.TABLENAME.START_DATE' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

몇 가지 다른 관련 질문을 확인했지만 아직 해결책을 찾지 못했습니다.

사라지다

조건부 집계를 직접 사용하십시오.

SELECT PROD_CDE, 
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 11) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 11) AS survival_12m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 23) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 23) AS survival_24m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 35) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 35) AS survival_36m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 47) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 47) AS survival_48m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 59) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 59) AS survival_60m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 71) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 71) AS survival_72m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 83) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 83) AS survival_84m,
    SUM(TIMESTAMPDIFF(MONTH, START_DATE, LEAST(END_DATE, NOW())) > 95) / SUM(TIMESTAMPDIFF(MONTH, START_DATE, NOW()) > 95) AS survival_96m
FROM TABLENAME 
WHERE START_DATE >= '2011-01-01' 
GROUP BY PROD_CDE

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

집계 함수를 사용하여 하위 쿼리에서 특정 행 가져 오기

분류에서Dev

SQL-GROUP BY를 사용하여 하위 쿼리 하위 집합 또는 조인에서 최신 레코드 가져 오기

분류에서Dev

ZF2 쿼리를 사용하여 XML 문서에서 값 가져 오기

분류에서Dev

Javascript를 사용하여 URL에서 쿼리 문자열 값 가져 오기

분류에서Dev

Javascript를 사용하여 URL에서 쿼리 문자열 값 가져 오기

분류에서Dev

쿼리를 사용하여 xml 파일에서 키 값 쌍 가져 오기

분류에서Dev

Django에서 집계를 사용하여 최소값 필드 이름 가져 오기

분류에서Dev

group by를 사용하여 데이터의 서로 다른 두 하위 집합을 기반으로 두 집계에 대한 고유 개수를 가져옵니다.

분류에서Dev

두 개의 SQL 쿼리 결합. 두 번째 쿼리에서 ID를 사용하여 이름 값 가져 오기

분류에서Dev

Java에서 람다를 사용하여 목록의 값 합계 가져 오기

분류에서Dev

집계를 사용하여 입력에서 배열 가져 오기

분류에서Dev

상위 요소를 구동하기 위해 두 번째 하위 쿼리에서 값을 가져 오는 다단계 쿼리

분류에서Dev

Linq Group by를 사용하여 합계 가져 오기

분류에서Dev

MySQL에서 Group BY를 사용하여 행 가져 오기

분류에서Dev

mongodb에서 집계를 사용하여 여러 필드에 대한 최대 값을 포함하는 개체 가져 오기

분류에서Dev

중첩 배열의 $ size (길이)를 가져오고 집계를 사용하여 상위 개체에 저장된 값의 차이를 계산합니다.

분류에서Dev

NuxtJS 및 AsyncData 메서드를 사용하여 URL에서 쿼리 문자열 값 가져 오기

분류에서Dev

jpath를 사용하여 Json에서 값 가져 오기

분류에서Dev

Python ElementTree를 사용하여 XML에서 값 가져 오기

분류에서Dev

xmllint를 사용하여 XML에서 노드 값 가져 오기

분류에서Dev

VBScript를 사용하여 SQL 2005에서 값 가져 오기

분류에서Dev

가져 오기를 사용하여 PHP에서 값 검색

분류에서Dev

sum 함수를 사용하여 sparkR에서 값 가져 오기

분류에서Dev

JQuery를 사용하여 테이블에서 값 가져 오기

분류에서Dev

Swift에서 Firebase를 사용하여 값 속성 가져 오기

분류에서Dev

AngularJs를 사용하여 URL에서 값 가져 오기

분류에서Dev

SQL에서 신용 지불 날짜 및 집계를 사용하여 차변 지불 날짜 가져 오기-느린 쿼리

분류에서Dev

Oracle에서 Group By를 사용하여 집계 값을 나열하는 방법

분류에서Dev

사용자 지정 엔터티 <T>를 사용하여 외래 키에서 값을 가져 오기 위해 EF 쿼리

Related 관련 기사

  1. 1

    집계 함수를 사용하여 하위 쿼리에서 특정 행 가져 오기

  2. 2

    SQL-GROUP BY를 사용하여 하위 쿼리 하위 집합 또는 조인에서 최신 레코드 가져 오기

  3. 3

    ZF2 쿼리를 사용하여 XML 문서에서 값 가져 오기

  4. 4

    Javascript를 사용하여 URL에서 쿼리 문자열 값 가져 오기

  5. 5

    Javascript를 사용하여 URL에서 쿼리 문자열 값 가져 오기

  6. 6

    쿼리를 사용하여 xml 파일에서 키 값 쌍 가져 오기

  7. 7

    Django에서 집계를 사용하여 최소값 필드 이름 가져 오기

  8. 8

    group by를 사용하여 데이터의 서로 다른 두 하위 집합을 기반으로 두 집계에 대한 고유 개수를 가져옵니다.

  9. 9

    두 개의 SQL 쿼리 결합. 두 번째 쿼리에서 ID를 사용하여 이름 값 가져 오기

  10. 10

    Java에서 람다를 사용하여 목록의 값 합계 가져 오기

  11. 11

    집계를 사용하여 입력에서 배열 가져 오기

  12. 12

    상위 요소를 구동하기 위해 두 번째 하위 쿼리에서 값을 가져 오는 다단계 쿼리

  13. 13

    Linq Group by를 사용하여 합계 가져 오기

  14. 14

    MySQL에서 Group BY를 사용하여 행 가져 오기

  15. 15

    mongodb에서 집계를 사용하여 여러 필드에 대한 최대 값을 포함하는 개체 가져 오기

  16. 16

    중첩 배열의 $ size (길이)를 가져오고 집계를 사용하여 상위 개체에 저장된 값의 차이를 계산합니다.

  17. 17

    NuxtJS 및 AsyncData 메서드를 사용하여 URL에서 쿼리 문자열 값 가져 오기

  18. 18

    jpath를 사용하여 Json에서 값 가져 오기

  19. 19

    Python ElementTree를 사용하여 XML에서 값 가져 오기

  20. 20

    xmllint를 사용하여 XML에서 노드 값 가져 오기

  21. 21

    VBScript를 사용하여 SQL 2005에서 값 가져 오기

  22. 22

    가져 오기를 사용하여 PHP에서 값 검색

  23. 23

    sum 함수를 사용하여 sparkR에서 값 가져 오기

  24. 24

    JQuery를 사용하여 테이블에서 값 가져 오기

  25. 25

    Swift에서 Firebase를 사용하여 값 속성 가져 오기

  26. 26

    AngularJs를 사용하여 URL에서 값 가져 오기

  27. 27

    SQL에서 신용 지불 날짜 및 집계를 사용하여 차변 지불 날짜 가져 오기-느린 쿼리

  28. 28

    Oracle에서 Group By를 사용하여 집계 값을 나열하는 방법

  29. 29

    사용자 지정 엔터티 <T>를 사용하여 외래 키에서 값을 가져 오기 위해 EF 쿼리

뜨겁다태그

보관