我有以下查询:
SELECT floor(datediff(u.created_at, curdate()) / 1) AS days_ago,
count(DISTINCT u.id) AS "New Users in Cohort",
count(DISTINCT i.user_id) AS "Uniq Users who invited Cohort",
count(DISTINCT u.id) / count(DISTINCT i.user_id) AS "% who invite"
FROM users u
LEFT JOIN invitations i
ON u.id = i.user_id
WHERE u.onboarding_started_at IS NOT NULL
GROUP BY days_ago;
我正在尝试让查询返回以下内容:
+----------+-----------+--------------------------+--------------+
| days_ago | New Users | Unique Users who Invited | % who invite |
+----------+-----------+--------------------------+--------------+
| 1 | 20 | 10 | 50% |
+----------+-----------+--------------------------+--------------+
新用户将是其中 u.created_at 是查询使用的日期
我做错了什么?谢谢!
最佳答案
你说的还不够让我判断是否DISTINCT
是需要的。
LEFT
似乎没有必要。
“昨天”是 `... >= CURDATE() - 间隔 1 天并且 ... < CURDATE()
SELECT count(DISTINCT u.id) AS "New Users in Cohort",
count(DISTINCT i.user_id) AS "Uniq Users who invited Cohort",
count(DISTINCT u.id) / count(DISTINCT i.user_id) AS "% who invite"
FROM users u
JOIN invitations i
ON u.id = i.user_id
WHERE u.onboarding_started_at IS NOT NULL
AND u.created_at >= CURDATE() - INTERVAL 1 DAY
AND u.created_at < CURDATE()
如果您想要多天的计数,那么我会使用 DATE(u.created_at)
作为DATE
显示和 GROUPing BY
的值。 (除非你真的想要“days_ago”。)
关于mysql - SQL 查询显示昨天创建的所有用户,有多少发送的邀请?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839877/