mysql - SQL 查询显示昨天创建的所有用户,有多少发送的邀请?

标签 mysql sql mariadb

我有以下查询:

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/

相关文章:

php - jQuery AJAX 问题 - 页面在提交时不断刷新且数据未发送

mysql - 使用mysql从时间戳中减去日期时间

MySQL 在单行中获取最小和最大列的匹配行

sql - 如果记录存在于 A 中则返回记录,否则如果记录存在于 B 中则返回记录,否则返回 null

mysql - 是否有一个数据库工具可以显示我有权执行的 sql 命令列表?

mysql - VARCHAR 中的 MariaDB CHECK 约束

mysql - SQL - 每个名字一行

在查询中使用 Python 变量时,Python MySQL 查询没有给出结果

MySQL更新连接查询解决重复值

php - 使用 mysql 和 php 在逗号分隔的值内搜索