Попытка разделить 2 отдельных запроса в MySQL - PullRequest
0 голосов
/ 09 октября 2019

Я видел пару сообщений о разделении двух отдельных запросов, которые показались мне полезными, но у меня все еще возникают проблемы с разделением этих двух запросов. Я написал разные подзапросы и следовал некоторым примерам, но я просто продолжаю получать ошибки, так как примеры запросов казались более простыми (без соединений).

Вот первый запрос:

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;

По сути, я ищу среднегодовое значение между покупками по подписке и подписчиками.

Может ли кто-нибудь направить меня в правильном направлении о том, какправильно сделать это?

Большое спасибо, Джонатан

1 Ответ

0 голосов
/ 09 октября 2019

Вы можете подойти к этому с помощью условного агрегирования:

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;
...