Knowledge Guide
HomeDatabasesSQL Practice Problems

Game Play Analysis IV

Problem

Table: Activity

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
(player_id, event_date) is the primary key (combination of columns with unique values) of this table.
This table shows the activity of players of some games.
Each row is a record of a player who logged in and played a number of games (possibly 0) before logging out on someday using some device.

Problem Definition

Write a solution to report the fraction of players that logged in again on the day after the day they first logged in, rounded to 2 decimal places. In other words, you need to count the number of players that logged in for at least two consecutive days starting from their first login date, then divide that number by the total number of players.

Example

Image
Image

Output

Image
Image

Try It Yourself

java
-- TODO: Write your user queries here

Solution

To determine the fraction of players who logged in again on the day after their first login, we can follow a systematic approach that involves identifying players with consecutive logins and calculating the required fraction. This solution leverages SQL's window functions and subqueries to efficiently perform the necessary computations.

SQL Query

SELECT ROUND( COUNT(DISTINCT player_id) / (SELECT COUNT(DISTINCT player_id) FROM Activity), 2 ) AS fraction FROM Activity a WHERE EXISTS ( SELECT 1 FROM Activity b WHERE b.player_id = a.player_id AND b.event_date = DATE_SUB(a.event_date, INTERVAL 1 DAY) );

Step-by-Step Approach

Step 1: Identify Players with Consecutive Logins

Find all players who have logged in on at least two consecutive days. This involves checking if a player has a login event where the previous day also has a login event.

SQL Query:

SELECT DISTINCT a.player_id FROM Activity a WHERE EXISTS ( SELECT 1 FROM Activity b WHERE b.player_id = a.player_id AND b.event_date = DATE_SUB(a.event_date, INTERVAL 1 DAY) );

Explanation:

Output After Step 1:

+-----------+ | player_id | +-----------+ | 1 | +-----------+

Step 2: Calculate Total Number of Players

Determine the total number of unique players in the Activity table. This serves as the denominator for calculating the fraction.

SQL Query:

SELECT COUNT(DISTINCT player_id) AS total_players FROM Activity;

Explanation:

Output After Step 2:

+--------------+ | total_players| +--------------+ | 3 | +--------------+

Step 3: Count Players with Consecutive Logins

Count the number of distinct players who have logged in on consecutive days, as identified in Step 1.

SQL Query:

SELECT COUNT(DISTINCT a.player_id) AS consecutive_login_players FROM Activity a WHERE EXISTS (...);

Explanation:

Output After Step 3:

+--------------------------+ | consecutive_login_players| +--------------------------+ | 1 | +--------------------------+

Step 4: Compute the Fraction of Players with Consecutive Logins

Calculate the fraction of players who logged in on consecutive days by dividing the number of players identified in Step 3 by the total number of players from Step 2. Round the result to two decimal places.

SQL Query:

SELECT ROUND( COUNT(DISTINCT player_id) / (SELECT COUNT(DISTINCT player_id) FROM Activity), 2 ) AS fraction FROM Activity a WHERE EXISTS (...);

Explanation:

Output After Step 4:

+----------+ | fraction | +----------+ | 0.33 | +----------+

Explanation of Output:

🤖 Don't fully get this? Learn it with Claude

Stuck on Game Play Analysis IV? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🎨 Explain it visually

Build the mental picture, not memorization.

I just read a lesson on **Game Play Analysis IV** (Databases) and want to truly understand it. Explain Game Play Analysis IV from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🤔 Walk me through it (interactive)

Socratic — adapts to where you're stuck.

Teach me **Game Play Analysis IV** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧪 Quiz me & fix my gaps

Active recall exposes what you missed.

Quiz me on **Game Play Analysis IV** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧠 Make it stick

Intuition + hook + flashcards for long-term memory.

Help me remember **Game Play Analysis IV** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes