Я пытаюсь подсчитать ненулевые значения для трех столбцов. Однако тот же COUNT возвращается для каждого из трех столбцов, несмотря на то, что имеет различное количество ненулевых значений. Я не уверен, почему это так (мне нужно переделать тип данных столбца? Неправильный SQL-предложение?). Ниже я попытался и результаты.COUNT ненулевые значения для нескольких столбцов одинаковы?
EDIT: заменены изображения текстом. сделал более короткие псевдонимы.
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
стол:
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
EDIT: Выполнение их по одному за раз дает те же результаты. Возможно, это проблема группировки. Если это так, как я могу достичь своих ожидаемых результатов?
Поочередно:
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 в пределах диапазона значений cast. _I все еще не думал, что это вызовет проблему с вашими значениями количества баллов ._ – Uueerdo
Это точный запрос, который вы использовали, или вы «присоединяетесь» к «входам» и/или «доходам» каким-либо образом? – Uueerdo