cswork / libraryOpen practice workspace

Coding questions · TikTok

Select 10% Users Randomly from User Table

This question evaluates competency in randomized sampling and data manipulation using SQL or Python, focusing on probabilistic selection and the use of built-in sampling functions within the Data Manipulation (SQL/Python) domain.

users

+----+----------+-------------+
| id | username | signup_date |
+----+----------+-------------+
| 1  | alice    | 2023-01-02  |
| 2  | bob      | 2023-02-15  |
| 3  | carol    | 2023-03-20  |
| 4  | dave     | 2023-04-10  |
| 5  | erin     | 2023-05-05  |
+----+----------+-------------+
Scenario

Need to pull an exploratory sample from a large user table for downstream analysis.

Question

Write an SQL query that randomly selects approximately 10% of all users from the users table.

Hints

Use a built-in random function or TABLESAMPLE and filter by a threshold.

Stable 10% Pseudo-Random User Sample

Write a PostgreSQL query that returns a reproducible pseudo-random sample of approximately 10% of rows from the users table. For this exercise, order users by MD5((id * 3)::text) as the stable pseudo-random key, then return CEIL(COUNT(*) * 0.10) users. Return id, username, and signup_date.

Table users

columntypeconstraints
idINTEGERPRIMARY KEY, NOT NULL
usernameVARCHARNOT NULL
signup_dateDATENOT NULL

Sample data:

idsignup_dateusername
12023-01-02alice
22023-02-15bob
32023-03-20carol
42023-04-10dave
52023-05-05erin

Expected output

A deterministic pseudo-random sample containing CEIL(10% of users). For the sample data, ordering by MD5((id * 3)::text) puts user id 2 first, so one row is returned.

idsignup_dateusername
22023-02-15bob

Hints

  1. Use a stable hash expression for reproducible pseudo-random ordering.
  2. Use CEIL(COUNT(*) * 0.10) to choose at least one row when the table is small.