Skip to main content

Number of Accounts That Did Not Stream

Problem Description​

You are given two tables, subscriptions and streams.

Subscriptions Table​

Column NameType
account_idint
start_datedate
end_datedate
  • account_id is the primary key column for this table.
  • Each row of this table indicates the start and end dates of an account's subscription.
  • Note that always start_date < end_date.

Streams Table​

Column NameType
session_idint
account_idint
stream_datedate
  • session_id is the primary key column for this table.
  • account_id is a foreign key from the Subscriptions table.
  • Each row of this table contains information about the account and the date associated with a stream session.

Write an SQL query to report the number of accounts that bought a subscription in 2021 but did not have any stream session.

Example​


Input:

Subscriptions table:

| account_id | start_date | end_date |
|------------|------------|------------|
| 9 | 2020-02-18 | 2021-10-30 |
| 3 | 2021-09-21 | 2021-11-13 |
| 11 | 2020-02-28 | 2020-08-18 |
| 13 | 2021-04-20 | 2021-09-22 |
| 4 | 2020-10-26 | 2021-05-08 |
| 5 | 2020-09-11 | 2021-01-17 |

Streams table:

| session_id | account_id | stream_date |
|------------|------------|-------------|
| 14 | 9 | 2020-05-16 |
| 16 | 3 | 2021-10-27 |
| 18 | 11 | 2020-04-29 |
| 17 | 13 | 2021-08-08 |
| 19 | 4 | 2020-12-31 |
| 13 | 5 | 2021-01-05 |

Output

| accounts_count |
|----------------|
| 2 |

Explanation: Users 4 and 9 did not stream in 2021. User 11 did not subscribe in 2021.

Approach​

The SQL query involves filtering subscriptions that started in 2021 and checking which of those accounts did not have any streams in 2021.

SQL Query​

WITH SubscriptionsIn2021 AS (
SELECT account_id
FROM subscriptions
WHERE YEAR(start_date) = 2021
),
StreamsIn2021 AS (
SELECT DISTINCT account_id
FROM streams
WHERE YEAR(stream_date) = 2021
)
SELECT COUNT(s.account_id) AS accounts_count
FROM SubscriptionsIn2021 s
LEFT JOIN StreamsIn2021 st
ON s.account_id = st.account_id
WHERE st.account_id IS NULL;