mysql - 尝试在 MySQL 中划分 2 个单独的查询

标签 mysql sql join count division

我看过一些关于划分两个单独查询的帖子,这些帖子似乎很有帮助,但我仍然无法划分这两个查询。我编写了不同的子查询并遵循了一些示例,但我不断收到错误,因为示例查询似乎更直接(无联接)。

这是第一个查询:

SELECT 
    YEAR(s.created_at) AS year,
    COUNT(*) AS pre_sub_buys
FROM subscription_users s
INNER JOIN users u
ON s.user_id = u.uid
LEFT JOIN canvases c
ON u.email = c.ref_email
WHERE c.is_paid=1 AND c.date_created < s.created_at
GROUP BY year;

我试图将其除以:

SELECT 
    YEAR(s.created_at) AS year,
    COUNT(s.created_at) AS subscribers
FROM subscription_users s
LEFT JOIN canvases c
ON c.entries_updated_at = s.updated_at
GROUP BY year;

本质上,我希望找到预订阅购买和订阅者之间的年平均值。

任何人都可以指导我如何正确执行此操作的正确方向吗?

非常感谢, 乔纳森

最佳答案

您可以使用条件聚合来解决此问题:

SELECT 
    YEAR(s.created_at) AS year,

    COUNT(CASE WHEN c.is_paid=1 AND c.date_created < s.created_at THEN 1
               ELSE NULL
          END) AS pre_sub_buys, 

    COUNT(s.created_at) AS subscribers, 

    COUNT(CASE WHEN c.is_paid=1 AND c.date_created < s.created_at THEN 1
               ELSE NULL
          END) / COUNT(s.created_at) AS pre_sub_buys_divided_by_subscribers

FROM subscription_users s
INNER JOIN users u
        ON s.user_id = u.uid
LEFT JOIN canvases c
        ON u.email = c.ref_email 
GROUP BY year;

关于mysql - 尝试在 MySQL 中划分 2 个单独的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58298512/

相关文章:

mysql - 优化mysql中的多 channel 连接

sql - 在 Excel VBA 中使用 SQL 记录集填充多列列表框

Mysql Count with Inner join of two tables, Average Join

sql - 如果键重复则返回最长的字符串

MySQL - 连接和连接

Mysql Join 2表非常慢,不添加其他索引

mysql - SQL 加入 NOT IN() 不起作用

MySQL只插入第一行

php - 通知、设置已查看

php - 更复杂的 ORDER BY(首先是字母,然后将数字视为整数)