3 개 열에 대해 null이 아닌 값을 계산하려고합니다. 그러나 널이 아닌 값의 수가 다르더라도 3 개의 열 각각에 대해 동일한 COUNT가 리턴됩니다. 이것이 왜 그런지 확실하지 않습니다 (열 데이터 형식을 다시 작성해야합니까? 잘못된 SQL 절이 있습니까?). 아래는 제가 시도한 것과 결과입니다.여러 열에 대해 null이 아닌 값이 같은 COUNT 값이 같습니까?
편집 : 이미지를 텍스트로 바꿉니다. 더 짧은 별칭을 만들었습니다. 테이블의
uid device_id install_ts firstlogin_ts firstpurchase_ts
------ ---------- ------------------- ------------------- -------------------
121045 GalaxyS3 2015-01-01 14:00:01 2015-01-01 14:00:01 (null)
121046 GalaxyS1 2015-01-01 14:00:03 2015-01-01 14:00:07 2015-01-02 06:00:07
121047 iPhone3 2015-01-01 14:00:03 2015-01-01 14:00:03 (null)
121048 GalaxyS1 2015-01-01 14:00:04 (null) (null)
121049 iPhone5 2015-01-01 14:00:07 2015-01-01 14:00:08 (null)
121050 iPad4 2015-01-01 14:00:07 2015-01-01 14:00:09 (null)
121051 iPhone4s 2015-01-01 14:00:11 (null) (null)
121052 iPhone4s 2015-01-01 14:00:13 (null) (null)
121053 GalaxyTab3 2015-01-01 14:00:16 (null) (null)
121054 iPhone4 2015-01-01 14:00:19 2015-01-01 14:00:22 (null)
121055 iPad1 2015-01-01 14:00:22 2015-01-01 14:00:26 (null)
121056 iPad2 2015-01-01 14:00:26 2015-01-01 14:00:29 (null)
121057 GalaxyTab2 2015-01-01 14:00:30 2015-01-01 14:00:31 (null)
121058 iPhone5s 2015-01-01 14:00:34 2015-01-01 14:00:38 (null)
121059 GalaxyS5 2015-01-01 14:00:34 (null) (null)
121060 GalaxyS5 2015-01-01 14:00:34 2015-01-01 14:00:38 (null)
121061 GalaxyS5 2015-01-01 14:00:37 (null) (null)
121062 iPhone3 2015-01-01 14:00:39 (null) (null)
설명 :
DESCRIBE users
Field Type Null Key Default Extra
---------------- ----------- ---- --- ------------------- ---------------------------
uid int(11) YES MUL (null)
device_id varchar(64) YES (null)
install_ts timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
firstlogin_ts timestamp NO 0000-00-00 00:00:00
firstpurchase_ts timestamp NO 0000-00-00 00:00:00
편집 : 여기
SELECT CAST(users.install_ts AS Date) AS inst_date,
COUNT(users.install_ts) AS total_inst,
COUNT(users.firstlogin_ts) AS total_first_logins,
COUNT(users.firstpurchase_ts) AS conv_cust,
SUM(CASE WHEN users.firstpurchase_ts IS NULL THEN 1 ELSE 0 END) AS conv_cust
FROM users
GROUP BY CAST(users.install_ts AS Date)
inst_date total_inst total_first_logins conv_cust conv_cust
---------- ---------- ------------------ --------- ---------
2015-01-01 17191 17191 17191 0
2015-01-02 41038 41038 41038 0
2015-01-03 41176 41176 41176 0
2015-01-04 41072 41072 41072 0
2015-01-05 41115 41115 41115 0
2015-01-06 8417 8417 8417 0
2015-05-16 9991 9991 9991 0
이 users
테이블 한 번에 하나씩 수행은 동일한 결과를 제공합니다. 어쩌면 그룹화 문제 일 수 있습니다. 그렇다면 의도 한 결과를 얻으려면 어떻게해야합니까? 한 번에
하나 :
SELECT COUNT(users.firstlogin_ts) AS total_first_logins
FROM users
GROUP BY CAST(users.install_ts AS Date)
total_first_logins
17191
41038
41176
41072
41115
8417
9991
또 다른 칼럼 :
SELECT COUNT(users.install_ts) AS total_inst
FROM users
GROUP BY CAST(users.install_ts AS Date)
total_inst
17191
41038
41176
41072
41115
8417
9991
나는 네가 한 일을 내가했다고 생각한다. 감사. – user2205916
그룹화 문제로 인해 문제가 발생할 수 있습니다. 적어도 캐스트의 값 범위 내에서 (사실상 무작위로) install_ts 대신 캐스트를 선택해야합니다. _ 여전히 카운트 값 문제를 일으킬 것이라고 생각하지 않습니다 ._ – Uueerdo
정확한 쿼리입니까, 아니면 어떤 방식 으로든 '로그인'및/또는 '수익'에 '가입'합니까? – Uueerdo