SQL checkpoint: the game launcher
Builds on lessons 1 to 6. Start at lesson 1
Learn
How this checkpoint works
Six questions about a game launcher: games, players and a month of sessions. Everything you need is in Foundations: picking columns, WHERE, AND and OR, LIKE, ORDER BY, LIMIT and DISTINCT.
No hints until you have checked once. The solution opens after three checks, or if you give up, but then the checkpoint is not cleared this time. Read each question twice. Most misses are a question answered slightly differently from the one asked.
Tables games, players, sessions
| id | title | genre | year | price | multiplayer | critic_score |
|---|---|---|---|---|---|---|
| 1 | Pocket Kingdom | strategy | 2021 | 14.99 | 0 | 86 |
| 2 | Neon Drift | racing | 2023 | 19.99 | 1 | 93 |
| 3 | Hollow Pines | horror | 2020 | 9.99 | 0 | 87 |
| 4 | Star Courier | adventure | 2022 | 24.99 | 0 | 86 |
| 5 | Block Party | party | 2019 | 4.99 | 1 | 90 |
| 6 | Tiny Tactics | strategy | 2024 | 12.99 | 1 | 95 |
| 7 | Moonlit Farm | simulation | 2021 | 13.99 | 1 | 70 |
| 8 | Skyline Rush | platformer | 2018 | 7.99 | 0 | 69 |
| 9 | Deep Signal | horror | 2024 | 17.99 | 0 | 90 |
| 10 | Goal Machine | sports | 2025 | 29.99 | 1 | 88 |
| 11 | Paper Knights | rpg | 2022 | 19.99 | 0 | 69 |
| 12 | Cloud Cafe | simulation | 2023 | 11.99 | 0 | 64 |
First 12 of 30 rows. Query the table to see the rest.
| id | gamertag | country | joined_on |
|---|---|---|---|
| 1 | NoScopeNan | UK | 2024-01-31 |
| 2 | xX_Toast_Xx | Canada | 2025-04-20 |
| 3 | LagIsMyFault | Australia | 2024-11-30 |
| 4 | QuietKeyboard | Ireland | 2025-03-27 |
| 5 | BrbSnacks | USA | 2024-07-19 |
| 6 | MumSaysBedtime | UK | 2025-06-15 |
| 7 | ZeroDeaths | Sweden | 2024-08-27 |
| 8 | AFKAlex | USA | 2024-10-28 |
| 9 | PixelPriya | India | 2025-05-26 |
| 10 | CtrlAltDefeat | UK | 2024-01-05 |
| 11 | SirLagsALot | Germany | 2024-03-28 |
| 12 | MidnightMo | UK | 2025-04-13 |
First 12 of 24 rows. Query the table to see the rest.
| id | player_id | game_id | played_on | minutes | score |
|---|---|---|---|---|---|
| 1 | 21 | 10 | 2026-09-01 | 90 | 990 |
| 2 | 16 | 22 | 2026-09-01 | 90 | 1740 |
| 3 | 17 | 17 | 2026-09-01 | 40 | 1580 |
| 4 | 3 | 17 | 2026-09-01 | 30 | 2500 |
| 5 | 4 | 17 | 2026-09-01 | 90 | 1010 |
| 6 | 13 | 22 | 2026-09-01 | 20 | 1620 |
| 7 | 9 | 15 | 2026-09-01 | 90 | 140 |
| 8 | 12 | 30 | 2026-09-01 | 20 | 1120 |
| 9 | 2 | 16 | 2026-09-01 | 90 | 1280 |
| 10 | 8 | 2 | 2026-09-02 | 25 | 770 |
| 11 | 5 | 22 | 2026-09-02 | 15 | 1260 |
| 12 | 12 | 30 | 2026-09-02 | 25 | 2080 |
First 12 of 240 rows. Query the table to see the rest.
Show the SQL that built them
-- games: a small game launcher. Shared SQL dataset (content/datasets/sql-games.sql), loaded with dataset: sql-games CREATE TABLE games (id INTEGER PRIMARY KEY, title TEXT, genre TEXT, year INTEGER, price REAL, multiplayer INTEGER, critic_score INTEGER); CREATE TABLE players (id INTEGER PRIMARY KEY, gamertag TEXT, country TEXT, joined_on TEXT); CREATE TABLE sessions (id INTEGER PRIMARY KEY, player_id INTEGER REFERENCES players(id), game_id INTEGER REFERENCES games(id), played_on TEXT, minutes INTEGER, score INTEGER); INSERT INTO games VALUES (1, 'Pocket Kingdom', 'strategy', 2021, 14.99, 0, 86), (2, 'Neon Drift', 'racing', 2023, 19.99, 1, 93), (3, 'Hollow Pines', 'horror', 2020, 9.99, 0, 87), (4, 'Star Courier', 'adventure', 2022, 24.99, 0, 86), (5, 'Block Party', 'party', 2019, 4.99, 1, 90), (6, 'Tiny Tactics', 'strategy', 2024, 12.99, 1, 95), (7, 'Moonlit Farm', 'simulation', 2021, 13.99, 1, 70), (8, 'Skyline Rush', 'platformer', 2018, 7.99, 0, 69), (9, 'Deep Signal', 'horror', 2024, 17.99, 0, 90), (10, 'Goal Machine', 'sports', 2025, 29.99, 1, 88), (11, 'Paper Knights', 'rpg', 2022, 19.99, 0, 69), (12, 'Cloud Cafe', 'simulation', 2023, 11.99, 0, 64), (13, 'Turbo Snails', 'racing', 2020, 0.0, 1, 86), (14, 'Lost Archive', 'adventure', 2019, 14.99, 0, 77), (15, 'Rift Arena', 'shooter', 2024, 0.0, 1, 67), (16, 'Echo Valley', 'rpg', 2025, 34.99, 0, 63), (17, 'Pixel Plunder', 'platformer', 2021, 9.99, 1, 92), (18, 'Quiz Royale', 'party', 2023, 0.0, 1, 60), (19, 'Frost Line', 'shooter', 2022, 24.99, 1, 83), (20, 'Garden Golems', 'strategy', 2018, 6.99, 0, 86), (21, 'Night Shift', 'horror', 2023, 12.99, 1, 68), (22, 'Wave Riders', 'sports', 2021, 19.99, 1, 58), (23, 'Mossy Mines', 'simulation', 2025, 16.99, 0, NULL), (24, 'The Last Lantern', 'adventure', 2024, 21.99, 0, 91), (25, 'Byte Brawlers', 'fighting', 2022, 14.99, 1, 62), (26, 'Sword & Spoon', 'rpg', 2020, 11.99, 0, 61), (27, 'Laser Tag Legends', 'shooter', 2019, 4.99, 1, 60), (28, 'Puzzle Lab', 'puzzle', 2024, 5.99, 0, 70), (29, 'Hexfall', 'puzzle', 2021, 3.99, 0, 73), (30, 'Kart Kingdom', 'racing', 2025, 39.99, 1, NULL); INSERT INTO players VALUES (1, 'NoScopeNan', 'UK', '2024-01-31'), (2, 'xX_Toast_Xx', 'Canada', '2025-04-20'), (3, 'LagIsMyFault', 'Australia', '2024-11-30'), (4, 'QuietKeyboard', 'Ireland', '2025-03-27'), (5, 'BrbSnacks', 'USA', '2024-07-19'), (6, 'MumSaysBedtime', 'UK', '2025-06-15'), (7, 'ZeroDeaths', 'Sweden', '2024-08-27'), (8, 'AFKAlex', 'USA', '2024-10-28'), (9, 'PixelPriya', 'India', '2025-05-26'), (10, 'CtrlAltDefeat', 'UK', '2024-01-05'), (11, 'SirLagsALot', 'Germany', '2024-03-28'), (12, 'MidnightMo', 'UK', '2025-04-13'), (13, 'GlitchWitch', 'Brazil', '2024-10-11'), (14, 'Respawn_Ruth', 'New Zealand', '2025-02-20'), (15, 'TeaBagTom', 'UK', '2025-07-18'), (16, 'CampingCarla', 'Spain', '2024-03-26'), (17, 'NoobMaster99', 'USA', '2024-09-17'), (18, 'DizzyDev', 'India', '2024-11-18'), (19, 'SpeedySam', 'UK', '2024-08-23'), (20, 'LootGoblin', 'Canada', '2025-06-09'), (21, 'HeadshotHana', 'Japan', '2024-10-22'), (22, 'ComboKing', 'Nigeria', '2024-01-31'), (23, 'SneakyPete', 'USA', '2024-03-12'), (24, 'BossFightBea', 'Ireland', '2025-07-30'); INSERT INTO sessions VALUES (1, 21, 10, '2026-09-01', 90, 990), (2, 16, 22, '2026-09-01', 90, 1740), (3, 17, 17, '2026-09-01', 40, 1580), (4, 3, 17, '2026-09-01', 30, 2500), (5, 4, 17, '2026-09-01', 90, 1010), (6, 13, 22, '2026-09-01', 20, 1620), (7, 9, 15, '2026-09-01', 90, 140), (8, 12, 30, '2026-09-01', 20, 1120), (9, 2, 16, '2026-09-01', 90, 1280), (10, 8, 2, '2026-09-02', 25, 770), (11, 5, 22, '2026-09-02', 15, 1260), (12, 12, 30, '2026-09-02', 25, 2080), (13, 1, 18, '2026-09-02', 75, 2390), (14, 13, 17, '2026-09-02', 30, 1700), (15, 8, 22, '2026-09-02', 120, 450), (16, 2, 25, '2026-09-02', 15, 740), (17, 8, 15, '2026-09-02', 30, 2470), (18, 3, 2, '2026-09-03', 30, 1540), (19, 16, 23, '2026-09-03', 50, NULL), (20, 20, 23, '2026-09-03', 40, NULL), (21, 5, 2, '2026-09-03', 60, 1440), (22, 11, 14, '2026-09-03', 120, 1260), (23, 3, 3, '2026-09-03', 120, 340), (24, 2, 30, '2026-09-03', 40, 2150), (25, 12, 17, '2026-09-03', 15, 1170), (26, 6, 18, '2026-09-03', 50, 1360), (27, 15, 25, '2026-09-03', 75, 1570), (28, 24, 13, '2026-09-03', 30, 1140), (29, 10, 2, '2026-09-03', 40, 590), (30, 3, 23, '2026-09-03', 40, NULL), (31, 18, 30, '2026-09-03', 90, 2390), (32, 21, 15, '2026-09-04', 50, 1120), (33, 2, 4, '2026-09-04', 15, 1360), (34, 2, 25, '2026-09-04', 60, 320), (35, 20, 17, '2026-09-04', 60, 1920), (36, 3, 17, '2026-09-04', 15, 140), (37, 10, 27, '2026-09-04', 90, 200), (38, 13, 2, '2026-09-04', 40, 690), (39, 2, 13, '2026-09-04', 30, 520), (40, 10, 30, '2026-09-05', 30, 1280), (41, 11, 27, '2026-09-05', 60, 1290), (42, 1, 7, '2026-09-06', 50, NULL), (43, 24, 7, '2026-09-06', 120, NULL), (44, 16, 11, '2026-09-06', 15, 1980), (45, 17, 23, '2026-09-06', 75, NULL), (46, 7, 23, '2026-09-06', 20, NULL), (47, 3, 27, '2026-09-06', 75, 650), (48, 13, 27, '2026-09-06', 45, 570), (49, 3, 19, '2026-09-07', 60, 1350), (50, 15, 16, '2026-09-07', 120, 2320), (51, 23, 5, '2026-09-07', 30, 2350), (52, 13, 23, '2026-09-07', 40, NULL), (53, 9, 30, '2026-09-07', 75, 2290), (54, 11, 7, '2026-09-07', 30, NULL), (55, 16, 5, '2026-09-07', 25, 340), (56, 6, 15, '2026-09-07', 25, 230), (57, 16, 25, '2026-09-07', 20, 2000), (58, 23, 22, '2026-09-07', 120, 760), (59, 1, 12, '2026-09-08', 25, NULL), (60, 7, 6, '2026-09-08', 15, 1800), (61, 19, 5, '2026-09-08', 120, 2120), (62, 4, 30, '2026-09-08', 40, 1180), (63, 8, 7, '2026-09-08', 75, NULL), (64, 24, 17, '2026-09-08', 20, 970), (65, 14, 5, '2026-09-08', 25, 1670), (66, 7, 1, '2026-09-09', 90, 820), (67, 13, 26, '2026-09-09', 30, 1670), (68, 17, 19, '2026-09-09', 40, 1760), (69, 24, 4, '2026-09-09', 50, 290), (70, 24, 17, '2026-09-09', 30, 160), (71, 12, 28, '2026-09-10', 15, NULL), (72, 13, 4, '2026-09-10', 75, 2070), (73, 13, 23, '2026-09-10', 45, NULL), (74, 23, 30, '2026-09-10', 15, 80), (75, 6, 21, '2026-09-10', 15, 1710), (76, 2, 17, '2026-09-10', 20, 820), (77, 16, 27, '2026-09-11', 90, 1200), (78, 12, 7, '2026-09-11', 90, NULL), (79, 17, 2, '2026-09-11', 20, 2100), (80, 7, 14, '2026-09-11', 60, 1950), (81, 10, 16, '2026-09-11', 30, 1070), (82, 18, 3, '2026-09-11', 20, 750), (83, 12, 30, '2026-09-12', 50, 2400), (84, 18, 28, '2026-09-12', 50, NULL), (85, 7, 2, '2026-09-12', 75, 440), (86, 5, 9, '2026-09-12', 120, 1900), (87, 12, 2, '2026-09-12', 120, 1060), (88, 15, 15, '2026-09-12', 45, 2110), (89, 7, 15, '2026-09-13', 120, 1380), (90, 21, 5, '2026-09-13', 60, 530), (91, 20, 7, '2026-09-13', 30, NULL), (92, 14, 2, '2026-09-13', 120, 1100), (93, 4, 13, '2026-09-13', 60, 1140), (94, 23, 25, '2026-09-13', 90, 1580), (95, 3, 2, '2026-09-13', 25, 1030), (96, 14, 27, '2026-09-13', 15, 2340), (97, 11, 30, '2026-09-13', 15, 1530), (98, 3, 12, '2026-09-14', 60, NULL), (99, 11, 19, '2026-09-14', 40, 1290), (100, 16, 7, '2026-09-14', 75, NULL), (101, 18, 16, '2026-09-14', 50, 730), (102, 17, 14, '2026-09-14', 30, 1580), (103, 7, 7, '2026-09-14', 60, NULL), (104, 14, 17, '2026-09-14', 40, 1390), (105, 2, 24, '2026-09-14', 60, 350), (106, 19, 27, '2026-09-14', 45, 2040), (107, 24, 25, '2026-09-14', 30, 1870), (108, 5, 8, '2026-09-15', 40, 70), (109, 12, 24, '2026-09-15', 25, 2500), (110, 6, 5, '2026-09-15', 60, 750), (111, 17, 14, '2026-09-15', 45, 1710), (112, 5, 27, '2026-09-15', 20, 2000), (113, 4, 14, '2026-09-15', 25, 1750), (114, 20, 8, '2026-09-15', 50, 1960), (115, 3, 12, '2026-09-15', 75, NULL), (116, 14, 23, '2026-09-16', 40, NULL), (117, 5, 9, '2026-09-16', 75, 1720), (118, 23, 5, '2026-09-16', 90, 1730), (119, 3, 15, '2026-09-16', 30, 880), (120, 5, 5, '2026-09-16', 45, 2190), (121, 3, 5, '2026-09-16', 25, 1370), (122, 8, 17, '2026-09-16', 25, 910), (123, 11, 13, '2026-09-16', 20, 70), (124, 17, 12, '2026-09-16', 120, NULL), (125, 21, 14, '2026-09-16', 60, 950), (126, 19, 21, '2026-09-16', 120, 1230), (127, 18, 28, '2026-09-17', 75, NULL), (128, 8, 15, '2026-09-17', 75, 790), (129, 5, 19, '2026-09-17', 40, 1510), (130, 14, 17, '2026-09-17', 45, 320), (131, 18, 23, '2026-09-17', 90, NULL), (132, 1, 9, '2026-09-17', 15, 1440), (133, 13, 15, '2026-09-17', 40, 750), (134, 1, 15, '2026-09-18', 90, 1720), (135, 2, 7, '2026-09-18', 45, NULL), (136, 7, 25, '2026-09-18', 120, 600), (137, 14, 15, '2026-09-18', 25, 560), (138, 9, 14, '2026-09-18', 75, 1350), (139, 4, 9, '2026-09-18', 40, 230), (140, 11, 3, '2026-09-18', 20, 1150), (141, 11, 25, '2026-09-18', 20, 1280), (142, 20, 25, '2026-09-19', 20, 150), (143, 12, 18, '2026-09-19', 25, 280), (144, 13, 15, '2026-09-19', 15, 1600), (145, 24, 28, '2026-09-19', 60, NULL), (146, 13, 9, '2026-09-19', 45, 580), (147, 15, 17, '2026-09-19', 20, 1990), (148, 7, 17, '2026-09-19', 45, 2110), (149, 14, 17, '2026-09-19', 20, 1680), (150, 21, 14, '2026-09-19', 20, 1230), (151, 23, 15, '2026-09-19', 90, 2400), (152, 5, 22, '2026-09-19', 25, 500), (153, 14, 2, '2026-09-19', 75, 830), (154, 12, 8, '2026-09-19', 30, 1580), (155, 7, 15, '2026-09-20', 15, 2410), (156, 18, 23, '2026-09-20', 15, NULL), (157, 14, 16, '2026-09-20', 40, 1680), (158, 23, 17, '2026-09-20', 75, 620), (159, 13, 7, '2026-09-21', 25, NULL), (160, 1, 23, '2026-09-21', 20, NULL), (161, 12, 13, '2026-09-21', 90, 90), (162, 21, 18, '2026-09-21', 120, 2110), (163, 24, 19, '2026-09-21', 25, 1380), (164, 12, 2, '2026-09-21', 15, 2210), (165, 1, 25, '2026-09-21', 25, 290), (166, 15, 19, '2026-09-21', 15, 1390), (167, 18, 7, '2026-09-22', 50, NULL), (168, 10, 5, '2026-09-22', 90, 560), (169, 20, 2, '2026-09-22', 40, 1510), (170, 12, 2, '2026-09-22', 30, 560), (171, 13, 25, '2026-09-22', 15, 290), (172, 7, 21, '2026-09-22', 45, 2380), (173, 11, 17, '2026-09-22', 30, 2100), (174, 8, 12, '2026-09-22', 40, NULL), (175, 11, 8, '2026-09-22', 50, 1500), (176, 9, 23, '2026-09-22', 90, NULL), (177, 3, 30, '2026-09-23', 75, 1540), (178, 16, 18, '2026-09-23', 15, 500), (179, 16, 4, '2026-09-23', 25, 210), (180, 9, 5, '2026-09-23', 15, 140), (181, 12, 5, '2026-09-23', 75, 1670), (182, 8, 23, '2026-09-23', 20, NULL), (183, 9, 10, '2026-09-24', 50, 700), (184, 7, 7, '2026-09-24', 15, NULL), (185, 16, 2, '2026-09-24', 40, 860), (186, 9, 15, '2026-09-24', 45, 1040), (187, 7, 4, '2026-09-24', 120, 2410), (188, 10, 13, '2026-09-24', 45, 670), (189, 7, 30, '2026-09-25', 25, 1120), (190, 17, 7, '2026-09-25', 45, NULL), (191, 8, 12, '2026-09-25', 45, NULL), (192, 24, 30, '2026-09-25', 25, 2130), (193, 10, 19, '2026-09-25', 25, 1140), (194, 16, 30, '2026-09-25', 45, 770), (195, 8, 17, '2026-09-25', 75, 910), (196, 2, 15, '2026-09-25', 120, 940), (197, 21, 6, '2026-09-25', 25, 2380), (198, 2, 17, '2026-09-26', 60, 500), (199, 3, 15, '2026-09-26', 15, 2260), (200, 1, 8, '2026-09-26', 20, 1140), (201, 13, 19, '2026-09-26', 90, 360), (202, 5, 2, '2026-09-26', 20, 1190), (203, 9, 15, '2026-09-26', 25, 990), (204, 19, 15, '2026-09-26', 30, 1940), (205, 19, 14, '2026-09-26', 50, 1430), (206, 20, 13, '2026-09-27', 40, 1030), (207, 19, 17, '2026-09-27', 90, 390), (208, 10, 9, '2026-09-27', 90, 680), (209, 15, 17, '2026-09-27', 75, 260), (210, 11, 2, '2026-09-27', 15, 760), (211, 24, 17, '2026-09-27', 120, 1810), (212, 7, 7, '2026-09-27', 25, NULL), (213, 24, 18, '2026-09-27', 25, 2480), (214, 5, 25, '2026-09-27', 90, 880), (215, 1, 15, '2026-09-27', 20, 2320), (216, 21, 19, '2026-09-27', 75, 1270), (217, 19, 5, '2026-09-28', 75, 1640), (218, 17, 8, '2026-09-28', 75, 1610), (219, 16, 7, '2026-09-28', 60, NULL), (220, 17, 24, '2026-09-28', 45, 750), (221, 12, 5, '2026-09-29', 60, 890), (222, 16, 11, '2026-09-29', 15, 990), (223, 14, 7, '2026-09-29', 30, NULL), (224, 4, 5, '2026-09-29', 30, 380), (225, 13, 5, '2026-09-29', 45, 2300), (226, 12, 25, '2026-09-29', 90, 170), (227, 4, 17, '2026-09-29', 40, 2050), (228, 21, 7, '2026-09-29', 120, NULL), (229, 3, 16, '2026-09-29', 40, 2120), (230, 24, 4, '2026-09-29', 45, 260), (231, 15, 7, '2026-09-29', 40, NULL), (232, 9, 17, '2026-09-29', 50, 2390), (233, 17, 7, '2026-09-30', 20, NULL), (234, 3, 15, '2026-09-30', 50, 380), (235, 11, 12, '2026-09-30', 15, NULL), (236, 9, 12, '2026-09-30', 20, NULL), (237, 9, 19, '2026-09-30', 40, 1740), (238, 17, 4, '2026-09-30', 60, 410), (239, 11, 14, '2026-09-30', 20, 870), (240, 13, 7, '2026-09-30', 40, NULL);
Checkpoint
Cheap multiplayer games
Return the title and price of every multiplayer game (multiplayer is 1) that costs less than 10. Cheapest first; games with the same price in alphabetical order of title.
On your own: hints appear after your first check, a solution after 3 checks or if you give up.
-- Your query here
Checkpoint
Top three by critics
Return the title of the three games with the highest critic_score, best first, and a second column named out_of_10 that shows the score out of 10 (so 87 becomes 8.7).
On your own: hints appear after your first check, a solution after 3 checks or if you give up.
-- Your query here
Checkpoint
Genres with a free game
Return every genre that has at least one free game (price is 0), each genre once, in alphabetical order.
On your own: hints appear after your first check, a solution after 3 checks or if you give up.
-- Your query here
CheckpointPredict the output
Horror or cheap puzzles
What does this query return? One title per line.
SELECT title FROM games WHERE genre = 'horror' OR genre = 'puzzle' AND price < 5 ORDER BY title;
CheckpointFix the bug
No kingdoms found
This should return the title and year of every game with King anywhere in its title, oldest first. It returns nothing. Fix it.
On your own: hints appear after your first check, a solution after 3 checks or if you give up.
SELECT title, year FROM games WHERE title = '%King%' ORDER BY year;
Checkpoint
New players from home
Return the gamertag and country of players from the UK or Ireland who joined on or after 1 January 2025 (joined_on is stored like 2025-01-01), earliest joiner first.
On your own: hints appear after your first check, a solution after 3 checks or if you give up.
-- Your query here
Cleared
Go back to
You can now
Save your progress to a free account
Next up: Core
NULL, counting, grouping, CASE and joins across three or four tables, including a table joined to itself, with a checkpoint after each group. Then change data with INSERT, UPDATE and DELETE.
- 08NULL and missing values in SQL
- 09SQL COUNT, SUM and AVG
- 10SQL GROUP BY and HAVING
- 11SQL CASE WHEN
- 12SQL checkpoint: summing up
- 13SQL JOIN: combining two tables
- 14SQL LEFT JOIN
- 15Joining three or more tables in SQL
- 16SQL self join
- 17SQL checkpoint: joins
- 18SQL INSERT, UPDATE and DELETE