| { |
| "name": "Chinook demo benchmark", |
| "description": "Curated NL→SQL questions on the Chinook music store schema. Designed as a realistic 'business analyst workload' rather than the hard-mode BIRD edge cases. Target accuracy ≥ 90% — these are the kinds of questions a product would actually serve.", |
| "db_id": "chinook", |
| "dialect": "sqlite", |
| "questions": [ |
| { |
| "id": "Q01", |
| "category": "count", |
| "difficulty": "easy", |
| "question": "How many albums are in the catalog?", |
| "gold_sql": "SELECT COUNT(*) FROM Album" |
| }, |
| { |
| "id": "Q02", |
| "category": "count", |
| "difficulty": "easy", |
| "question": "How many tracks are there in total?", |
| "gold_sql": "SELECT COUNT(*) FROM Track" |
| }, |
| { |
| "id": "Q03", |
| "category": "count", |
| "difficulty": "easy", |
| "question": "How many customers do we have?", |
| "gold_sql": "SELECT COUNT(*) FROM Customer" |
| }, |
| { |
| "id": "Q04", |
| "category": "list", |
| "difficulty": "easy", |
| "question": "List the names of all genres.", |
| "gold_sql": "SELECT Name FROM Genre" |
| }, |
| { |
| "id": "Q05", |
| "category": "list", |
| "difficulty": "easy", |
| "question": "List all media types.", |
| "gold_sql": "SELECT Name FROM MediaType" |
| }, |
| { |
| "id": "Q06", |
| "category": "filter", |
| "difficulty": "easy", |
| "question": "Which customers are from Germany?", |
| "gold_sql": "SELECT FirstName, LastName FROM Customer WHERE Country = 'Germany'" |
| }, |
| { |
| "id": "Q07", |
| "category": "filter", |
| "difficulty": "easy", |
| "question": "List the customers from Brazil.", |
| "gold_sql": "SELECT FirstName, LastName FROM Customer WHERE Country = 'Brazil'" |
| }, |
| { |
| "id": "Q08", |
| "category": "aggregation", |
| "difficulty": "easy", |
| "question": "What is the average track length in milliseconds?", |
| "gold_sql": "SELECT AVG(Milliseconds) FROM Track" |
| }, |
| { |
| "id": "Q09", |
| "category": "aggregation", |
| "difficulty": "easy", |
| "question": "What is the total revenue across all invoices?", |
| "gold_sql": "SELECT SUM(Total) FROM Invoice" |
| }, |
| { |
| "id": "Q10", |
| "category": "aggregation", |
| "difficulty": "easy", |
| "question": "What is the most expensive track price?", |
| "gold_sql": "SELECT MAX(UnitPrice) FROM Track" |
| }, |
| { |
| "id": "Q11", |
| "category": "join-2", |
| "difficulty": "moderate", |
| "question": "List all album titles by the artist AC/DC.", |
| "gold_sql": "SELECT Title FROM Album JOIN Artist ON Album.ArtistId = Artist.ArtistId WHERE Artist.Name = 'AC/DC'" |
| }, |
| { |
| "id": "Q12", |
| "category": "join-2", |
| "difficulty": "moderate", |
| "question": "Which artists have the genre Jazz in their catalog?", |
| "gold_sql": "SELECT DISTINCT Artist.Name FROM Artist JOIN Album ON Album.ArtistId = Artist.ArtistId JOIN Track ON Track.AlbumId = Album.AlbumId JOIN Genre ON Track.GenreId = Genre.GenreId WHERE Genre.Name = 'Jazz'" |
| }, |
| { |
| "id": "Q13", |
| "category": "join-2", |
| "difficulty": "moderate", |
| "question": "List the names of tracks in the album 'Let There Be Rock'.", |
| "gold_sql": "SELECT Track.Name FROM Track JOIN Album ON Track.AlbumId = Album.AlbumId WHERE Album.Title = 'Let There Be Rock'" |
| }, |
| { |
| "id": "Q14", |
| "category": "group-by", |
| "difficulty": "moderate", |
| "question": "How many customers are in each country?", |
| "gold_sql": "SELECT Country, COUNT(*) FROM Customer GROUP BY Country" |
| }, |
| { |
| "id": "Q15", |
| "category": "group-by", |
| "difficulty": "moderate", |
| "question": "How many tracks does each genre have?", |
| "gold_sql": "SELECT Genre.Name, COUNT(*) FROM Genre JOIN Track ON Track.GenreId = Genre.GenreId GROUP BY Genre.Name" |
| }, |
| { |
| "id": "Q16", |
| "category": "group-by", |
| "difficulty": "moderate", |
| "question": "What is the total revenue per country?", |
| "gold_sql": "SELECT BillingCountry, SUM(Total) FROM Invoice GROUP BY BillingCountry" |
| }, |
| { |
| "id": "Q17", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "question": "Who are the top 5 customers by total spending?", |
| "gold_sql": "SELECT Customer.FirstName, Customer.LastName, SUM(Invoice.Total) AS total FROM Customer JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId GROUP BY Customer.CustomerId ORDER BY total DESC LIMIT 5" |
| }, |
| { |
| "id": "Q18", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "question": "What are the 5 longest tracks?", |
| "gold_sql": "SELECT Name FROM Track ORDER BY Milliseconds DESC LIMIT 5" |
| }, |
| { |
| "id": "Q19", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "question": "Which 3 countries have the most customers, and how many customers does each have?", |
| "gold_sql": "SELECT Country, COUNT(*) AS n FROM Customer GROUP BY Country ORDER BY n DESC LIMIT 3" |
| }, |
| { |
| "id": "Q20", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "question": "Which artist has the most albums?", |
| "gold_sql": "SELECT Artist.Name FROM Artist JOIN Album ON Album.ArtistId = Artist.ArtistId GROUP BY Artist.ArtistId ORDER BY COUNT(*) DESC LIMIT 1" |
| }, |
| { |
| "id": "Q21", |
| "category": "date-filter", |
| "difficulty": "moderate", |
| "question": "How many invoices were issued in 2010?", |
| "gold_sql": "SELECT COUNT(*) FROM Invoice WHERE strftime('%Y', InvoiceDate) = '2010'" |
| }, |
| { |
| "id": "Q22", |
| "category": "date-filter", |
| "difficulty": "moderate", |
| "question": "What is the total revenue for the year 2011?", |
| "gold_sql": "SELECT SUM(Total) FROM Invoice WHERE strftime('%Y', InvoiceDate) = '2011'" |
| }, |
| { |
| "id": "Q23", |
| "category": "join-3", |
| "difficulty": "moderate", |
| "question": "Total revenue per genre.", |
| "gold_sql": "SELECT Genre.Name, SUM(InvoiceLine.UnitPrice * InvoiceLine.Quantity) AS revenue FROM Genre JOIN Track ON Track.GenreId = Genre.GenreId JOIN InvoiceLine ON InvoiceLine.TrackId = Track.TrackId GROUP BY Genre.Name" |
| }, |
| { |
| "id": "Q24", |
| "category": "join-3", |
| "difficulty": "moderate", |
| "question": "Which employee has the highest total sales?", |
| "gold_sql": "SELECT Employee.FirstName, Employee.LastName FROM Employee JOIN Customer ON Customer.SupportRepId = Employee.EmployeeId JOIN Invoice ON Invoice.CustomerId = Customer.CustomerId GROUP BY Employee.EmployeeId ORDER BY SUM(Invoice.Total) DESC LIMIT 1" |
| }, |
| { |
| "id": "Q25", |
| "category": "join-3", |
| "difficulty": "moderate", |
| "question": "List the distinct tracks in the playlist '90’s Music'.", |
| "gold_sql": "SELECT DISTINCT Track.Name FROM Track JOIN PlaylistTrack ON PlaylistTrack.TrackId = Track.TrackId JOIN Playlist ON Playlist.PlaylistId = PlaylistTrack.PlaylistId WHERE Playlist.Name = '90’s Music'" |
| }, |
| { |
| "id": "Q26", |
| "category": "aggregation", |
| "difficulty": "moderate", |
| "question": "What is the average invoice total per country?", |
| "gold_sql": "SELECT BillingCountry, AVG(Total) FROM Invoice GROUP BY BillingCountry" |
| }, |
| { |
| "id": "Q27", |
| "category": "having", |
| "difficulty": "moderate", |
| "question": "Which countries have more than 5 customers?", |
| "gold_sql": "SELECT Country FROM Customer GROUP BY Country HAVING COUNT(*) > 5" |
| }, |
| { |
| "id": "Q28", |
| "category": "having", |
| "difficulty": "moderate", |
| "question": "Which artists have more than 3 albums?", |
| "gold_sql": "SELECT Artist.Name FROM Artist JOIN Album ON Album.ArtistId = Artist.ArtistId GROUP BY Artist.ArtistId HAVING COUNT(*) > 3" |
| }, |
| { |
| "id": "Q29", |
| "category": "filter", |
| "difficulty": "easy", |
| "question": "Which tracks belong to the Rock genre?", |
| "gold_sql": "SELECT Track.Name FROM Track JOIN Genre ON Track.GenreId = Genre.GenreId WHERE Genre.Name = 'Rock'" |
| }, |
| { |
| "id": "Q30", |
| "category": "list", |
| "difficulty": "easy", |
| "question": "List all playlists.", |
| "gold_sql": "SELECT Name FROM Playlist" |
| }, |
| { |
| "id": "H01", |
| "category": "filter", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "Which employees are based in Calgary?", |
| "gold_sql": "SELECT FirstName, LastName FROM Employee WHERE City = 'Calgary'" |
| }, |
| { |
| "id": "H02", |
| "category": "filter", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "List the invoice IDs and totals for invoices billed to the city of Paris.", |
| "gold_sql": "SELECT InvoiceId, Total FROM Invoice WHERE BillingCity = 'Paris'" |
| }, |
| { |
| "id": "H03", |
| "category": "count", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "How many employees report to nobody (i.e., have no manager)?", |
| "gold_sql": "SELECT COUNT(*) FROM Employee WHERE ReportsTo IS NULL" |
| }, |
| { |
| "id": "H04", |
| "category": "aggregation", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "What is the minimum track price?", |
| "gold_sql": "SELECT MIN(UnitPrice) FROM Track" |
| }, |
| { |
| "id": "H05", |
| "category": "join-2", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "List the genres of tracks on the album 'Restless and Wild'.", |
| "gold_sql": "SELECT DISTINCT Genre.Name FROM Genre JOIN Track ON Track.GenreId = Genre.GenreId JOIN Album ON Track.AlbumId = Album.AlbumId WHERE Album.Title = 'Restless and Wild'" |
| }, |
| { |
| "id": "H06", |
| "category": "join-2", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which artist made the album 'Big Ones'?", |
| "gold_sql": "SELECT Artist.Name FROM Artist JOIN Album ON Album.ArtistId = Artist.ArtistId WHERE Album.Title = 'Big Ones'" |
| }, |
| { |
| "id": "H07", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which 3 genres have the most tracks?", |
| "gold_sql": "SELECT Genre.Name FROM Genre JOIN Track ON Track.GenreId = Genre.GenreId GROUP BY Genre.GenreId ORDER BY COUNT(*) DESC LIMIT 3" |
| }, |
| { |
| "id": "H08", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which customer made the largest single invoice?", |
| "gold_sql": "SELECT Customer.FirstName, Customer.LastName FROM Customer JOIN Invoice ON Invoice.CustomerId = Customer.CustomerId ORDER BY Invoice.Total DESC LIMIT 1" |
| }, |
| { |
| "id": "H09", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Top 10 longest albums by total track duration.", |
| "gold_sql": "SELECT Album.Title FROM Album JOIN Track ON Track.AlbumId = Album.AlbumId GROUP BY Album.AlbumId ORDER BY SUM(Track.Milliseconds) DESC LIMIT 10" |
| }, |
| { |
| "id": "H10", |
| "category": "group-by", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "For each customer, list their first name, last name, and how many invoices they have.", |
| "gold_sql": "SELECT Customer.FirstName, Customer.LastName, COUNT(Invoice.InvoiceId) FROM Customer JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId GROUP BY Customer.CustomerId" |
| }, |
| { |
| "id": "H11", |
| "category": "date-filter", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Total revenue for January 2010.", |
| "gold_sql": "SELECT SUM(Total) FROM Invoice WHERE strftime('%Y-%m', InvoiceDate) = '2010-01'" |
| }, |
| { |
| "id": "H12", |
| "category": "date-filter", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "How many invoices were issued in the second quarter of 2012?", |
| "gold_sql": "SELECT COUNT(*) FROM Invoice WHERE strftime('%Y-%m', InvoiceDate) BETWEEN '2012-04' AND '2012-06'" |
| }, |
| { |
| "id": "H13", |
| "category": "having", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which genres have at least 100 tracks?", |
| "gold_sql": "SELECT Genre.Name FROM Genre JOIN Track ON Track.GenreId = Genre.GenreId GROUP BY Genre.GenreId HAVING COUNT(*) >= 100" |
| }, |
| { |
| "id": "H14", |
| "category": "having", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which customers have spent more than 40 dollars in total?", |
| "gold_sql": "SELECT Customer.FirstName, Customer.LastName FROM Customer JOIN Invoice ON Invoice.CustomerId = Customer.CustomerId GROUP BY Customer.CustomerId HAVING SUM(Invoice.Total) > 40" |
| }, |
| { |
| "id": "H15", |
| "category": "join-3", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "What is the total revenue for the country Germany?", |
| "gold_sql": "SELECT SUM(Total) FROM Invoice WHERE BillingCountry = 'Germany'" |
| }, |
| { |
| "id": "H16", |
| "category": "join-3", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which media types are used by tracks in the Pop genre?", |
| "gold_sql": "SELECT DISTINCT MediaType.Name FROM MediaType JOIN Track ON Track.MediaTypeId = MediaType.MediaTypeId JOIN Genre ON Track.GenreId = Genre.GenreId WHERE Genre.Name = 'Pop'" |
| }, |
| { |
| "id": "H17", |
| "category": "join-3", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which customers bought tracks from the album 'Greatest Hits'?", |
| "gold_sql": "SELECT DISTINCT Customer.FirstName, Customer.LastName FROM Customer JOIN Invoice ON Invoice.CustomerId = Customer.CustomerId JOIN InvoiceLine ON InvoiceLine.InvoiceId = Invoice.InvoiceId JOIN Track ON Track.TrackId = InvoiceLine.TrackId JOIN Album ON Track.AlbumId = Album.AlbumId WHERE Album.Title = 'Greatest Hits'" |
| }, |
| { |
| "id": "H18", |
| "category": "filter", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "List the tracks that cost more than 1 dollar.", |
| "gold_sql": "SELECT Name FROM Track WHERE UnitPrice > 1" |
| }, |
| { |
| "id": "H19", |
| "category": "aggregation", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "What fraction of tracks belong to the Rock genre?", |
| "gold_sql": "SELECT CAST(SUM(CASE WHEN Genre.Name = 'Rock' THEN 1 ELSE 0 END) AS REAL) / COUNT(*) FROM Track JOIN Genre ON Track.GenreId = Genre.GenreId" |
| }, |
| { |
| "id": "H20", |
| "category": "group-by", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Average track length per genre.", |
| "gold_sql": "SELECT Genre.Name, AVG(Track.Milliseconds) FROM Genre JOIN Track ON Track.GenreId = Genre.GenreId GROUP BY Genre.Name" |
| }, |
| { |
| "id": "H21", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Top 5 cities by total revenue.", |
| "gold_sql": "SELECT BillingCity FROM Invoice GROUP BY BillingCity ORDER BY SUM(Total) DESC LIMIT 5" |
| }, |
| { |
| "id": "H22", |
| "category": "list", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "What are the distinct billing countries from invoices?", |
| "gold_sql": "SELECT DISTINCT BillingCountry FROM Invoice" |
| }, |
| { |
| "id": "H23", |
| "category": "filter", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "List the albums that have zero tracks linked to them.", |
| "gold_sql": "SELECT Title FROM Album WHERE AlbumId NOT IN (SELECT AlbumId FROM Track WHERE AlbumId IS NOT NULL)" |
| }, |
| { |
| "id": "H24", |
| "category": "filter", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which customers have never made a purchase?", |
| "gold_sql": "SELECT FirstName, LastName FROM Customer WHERE CustomerId NOT IN (SELECT CustomerId FROM Invoice)" |
| }, |
| { |
| "id": "H25", |
| "category": "join-2", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Names of tracks composed by Angus Young.", |
| "gold_sql": "SELECT Name FROM Track WHERE Composer LIKE '%Angus Young%'" |
| }, |
| { |
| "id": "H26", |
| "category": "aggregation", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "How many distinct genres are represented in the catalog?", |
| "gold_sql": "SELECT COUNT(DISTINCT GenreId) FROM Track" |
| }, |
| { |
| "id": "H27", |
| "category": "join-2", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "Which playlists contain the track 'Eruption'?", |
| "gold_sql": "SELECT DISTINCT Playlist.Name FROM Playlist JOIN PlaylistTrack ON PlaylistTrack.PlaylistId = Playlist.PlaylistId JOIN Track ON Track.TrackId = PlaylistTrack.TrackId WHERE Track.Name = 'Eruption'" |
| }, |
| { |
| "id": "H28", |
| "category": "top-n", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Which is the cheapest track in the catalog?", |
| "gold_sql": "SELECT Name FROM Track ORDER BY UnitPrice ASC, TrackId ASC LIMIT 1" |
| }, |
| { |
| "id": "H29", |
| "category": "count", |
| "difficulty": "easy", |
| "split": "held-out", |
| "question": "How many tracks does the album 'Use Your Illusion I' have?", |
| "gold_sql": "SELECT COUNT(*) FROM Track JOIN Album ON Track.AlbumId = Album.AlbumId WHERE Album.Title = 'Use Your Illusion I'" |
| }, |
| { |
| "id": "H30", |
| "category": "group-by", |
| "difficulty": "moderate", |
| "split": "held-out", |
| "question": "Number of invoices per year.", |
| "gold_sql": "SELECT strftime('%Y', InvoiceDate) AS year, COUNT(*) FROM Invoice GROUP BY year" |
| } |
| ] |
| } |
|
|