# 11 Criteo SQL Interview Questions (Updated 2024)

Updated on

June 23, 2024

French ad-tech company Criteo uses SQL all the damn time for extracting and analyzing advertising data. That's why Criteo almost always evaluates jobseekers on SQL questions during interviews for Data Analyst, Data Science, and BI jobs.

To help you study for the Criteo SQL interview, here's 11 Criteo SQL interview questions – scroll down to start solving them!

## 11 Criteo SQL Interview Questions

### SQL Question 1: Analyzing Advertising Click Rate

Assume we have a table named with server-side log records for each time an ad was displayed to a user and whether it was clicked on or not. Columns are (the ID of the ad), (the ID of the user to whom the ad was displayed), (the timestamp the ad was displayed), and (a boolean value whether the user clicked on the ad or not).

Your task is to write a SQL query that calculates the running average click rate for each ad by day. The click rate for an ad is defined as the number of clicks divided by the number of times the ad was displayed. The running average click rate for an ad on a specific day is the average click rate for that ad from the start up to that day.

##### Example Input:
10112306/01/2022 00:00:00True
10126506/01/2022 00:00:00False
10236206/01/2022 00:00:00True
10119206/02/2022 00:00:00True
10298106/02/2022 00:00:00False
10112306/03/2022 00:00:00True
10226506/03/2022 00:00:00True
##### Example Output:
06/01/20221010.50
06/01/20221021.00
06/02/20221010.67
06/02/20221020.50
06/03/20221010.75
06/03/20221020.67

In the above query, we first type cast the boolean column to an integer to make it suitable for averaging (with =1 and =0). Then we use the window function with to calculate the running average per . inside the window function clause makes sure the running average is calculated for each day from the start up to that day. Lastly, we order the result by and to get the desired output.

To solve another window function question on DataLemur's free online SQL coding environment, try this Google SQL Interview Question:

### SQL Question 2: Second Highest Salary

Given a table of Criteo employee salary information, write a SQL query to find the 2nd highest salary among all employees.

#### Criteo Example Input:

employee_idsalary
12500
2800
31000
41200

#### Example Output:

second_highest_salary
1200

Test your SQL query for this problem and run your code right in DataLemur's online SQL environment:

You can find a detailed solution here: 2nd Highest Salary.

### SQL Question 3: What is the difference between a primary key and a foreign key?

A primary key is a column (or set of columns) in a table that uniquely identifies each row in the table. It cannot contain null values and must be unique across all rows in the table.

A foreign key is a column (or set of columns) in a table that references the primary key of another table. It is used to establish a relationship between the two tables. A foreign key can contain null values, and multiple rows in the referencing table can reference the same row in the referenced table.

For example, consider a database with two tables: and . The Criteo customers table might have a primary key column called , while the Criteo orders table might have a foreign key column called that references the column in the table. This establishes a relationship between the two tables, such that each row in the orders table corresponds to a specific Criteo customer.

### SQL Question 4: Analyzing Ad Performance

Consider you are a data analyst at Criteo, a company that provides an advertising platform for e-commerce businesses. The business stakeholders want to know how well the ads are performing. They are interested in the click-through rate (CTR) per advertiser. To do this, we need to compute the ratio of total clicks to total views per advertiser.

You have the following two tables:

110130100
21021550
310160200
410330150
51024575
##### table:
150050
2750100
330030
440040
560060

Compute the click-through rate (CTR) per advertiser, and order the result by CTR in descending order.

##### Example Output:
1010.114
1020.16
1030.1

You can answer this question by joining the two tables on the column. Afterwards, you group by the and compute the CTR as the sum of divided by the sum of .

This query provides an aggregated ratio of clicks to views, which is the definition of CTR, per advertiser. Ordering the result in descending order gives us the advertisers with the highest CTR at the top.

### SQL Question 5: What's a primary key?

A primary key is a special type of column or set of columns in a database table that is used to identify each row in the table. It helps to ensure that all the rows are distinct and prevents null values. Additionally, primary keys play a crucial role in maintaining the accuracy of the data by making sure that there are no duplicate rows. They are also used to establish relationships between tables.

To create a primary key in a SQL database, you can use the constraint. For example, in the table , the column is the primary key.

### SQL Question 6: Extract Customer Behavior Data

Assume you are an analyst at Criteo, an internet advertising company. You have been given a task to identify all the customers who clicked ads for product category 'Electronics' from the 'USA' but did not make a purchase in the month of 'June 2022'. The Customer behavior is logged in two different tables named 'Customer_Clicks' and 'Customer_Purchases'.

Here is the example data from 'Customer_Clicks' and 'Customer_Purchases':

Example Input:

click_idcustomer_idclick_dateproduct_categorycountry
10112306/01/2022 00:00:00ElectronicsUSA
10245606/02/2022 00:00:00FurnitureUSA
10378906/18/2022 00:00:00ElectronicsUSA
10412307/26/2022 00:00:00ElectronicsUK
10545607/05/2022 00:00:00ElectronicsUSA

Example Input:

purchase_idcustomer_idpurchase_dateproduct_category
50112306/08/2022 00:00:00Electronics
50245606/10/2022 00:00:00Furniture
50378906/18/2022 00:00:00Toys
50412307/26/2022 00:00:00Electronics
50545607/05/2022 00:00:00Furniture

In above PostgresSQL query, the date is cast into date type to extract the 'month' part. This query performs a LEFT JOIN on 'Customer_Clicks' and 'Customer_Purchases' on 'customer_id' to get the complete activity of a customer who clicked 'Electronics' ads from 'USA'. The WHERE clause filters out customers who clicked in 'June 2022', AND either didn't purchase in 'June 2022' or didn't purchase 'Electronics' or didn't make any purchase.

### SQL Question 7: What are the various forms of normalization?

There are several normal forms that define the rules for normalizing a database:

A database is in first normal form (1NF) if it meets the following criteria:

• Each column in a table contains a single value (no lists or containers of data)
• Each column should contain the same type of data (no mixing strings vs. integers)
• Each row in the table is unique

A database is in second normal form (2NF) if it meets the following criteria:

• It is in first normal form.
• All non-key attributes in a table are fully dependent on the primary key.

Said another way, to achieve 2NF, besides following all the rules from 1NF all the columns in a given table should be dependent only on that table's primary key.

A database is in third normal form (3NF) if it meets the following criteria:

• It is in second normal form.
• There are no transitive dependencies in the table.

A transitive dependency means that a piece of data in one column is derived from another column. For example, it wouldn't make sense to keep a column called "user's age" and "user's birthdate" (because age can be derived from birthdate.

While there's also a 4th and 5th normal form, it's too pedantic and hence out-of-scope to know for the Criteo SQL interview.

### SQL Question 8: Average clicks per campaign

Criteo is a technology company that enables brands to launch advertisement campaigns based on the product interests of users on the internet. Their job involves managing many advertisement campaigns each day and understanding how each performs is crucial.

Let's say we have a table that contains each click made by users on the different ads. Each ad can be identified by a . The question is: What is the average clicks per campaign?

The table:

click_iduser_idclick_timecampaign_id
10019892022-05-11 14:00:00201
10027452022-05-11 14:01:00201
10033622022-05-11 15:00:00201
10046212022-05-12 10:00:00202
10055212022-05-12 11:00:00202
10062542022-05-12 13:00:00203
10071222022-05-13 11:00:00203

The PostgreSQL query to find the average clicks per campaign:

This query uses the window function AVG() to calculate the average per . The PARTITION BY clause is used to divide the result set into partitions (groups) that will be processed by the AVG function. This results in separate average calculated for each , thus giving us the average number of clicks per campaign.

To practice a very similar question try this interactive Facebook App Click-through Rate (CTR) Question which is similar for requiring SQL for click-based analytics or this Stripe Repeated Payments Question which is similar for analysis of repeated actions.

### SQL Question 9: Click-Through Conversion Rates for Criteo

Given the below tables containing recent user interaction data, write a SQL query that calculates the click-through rate (CTR) and the click-to-add-to-cart conversion rate.

CTR is defined as the number of advertisement clicks divided by the number of advertisement views, both within a specified time period. The click-to-add-to-cart conversion rate is defined as the number of times a product is added to the cart after a click divided by the total number of clicks, both within a specified time period.

##### Example Input:
11232022-08-12 00:00:00001
22652022-08-12 01:20:00002
32652022-08-12 01:25:00001
43622022-08-12 02:45:00002
51922022-08-12 02:55:00001
##### Example Input:
1011232022-08-12 00:05:00001
1021922022-08-12 03:00:00001
1032652022-08-12 1:30:00002
##### Example Input:
3011232022-08-12 00:10:00001
3021922022-08-12 03:05:00001

This SQL query calculates the CTR as the count of unique clicks divided by the count of unique views, and the conversion rate as the count of unique add-to-cart events divided by the count of unique clicks. All events are grouped by advertisement id.

To practice another question about calculating rates, solve this TikTok SQL question on DataLemur's online SQL coding environment:

### SQL Question 10: What sets a cross join apart from a natural join?

Cross join and natural join are like two sides of a coin in the world of SQL.

Cross joins is like the wild and reckless cousin who creates a giant new table by combining every row from table A with every row from table B, no questions asked, no common key needed.

Natural joins are like the more refined and selective cousin who only combines rows from multiple tables if they have something in common (i.e., common columns/keys).

While cross join doesn't discriminate and will create a massive table if given the chance, natural join is more selective and only returns a table with the number of rows equal to the number of matching rows in the input tables. So, choose your JOIN wisely!

### SQL Question 11: Filtering Customer Records

As a data analyst of Criteo, you are required to look after customer records. Due to the increasing number of fraudulent activities recorded recently, the company has asked you to filter out the customer records where the email address ends with any of the following: , or . The customer data is available in the table.

##### Example Input:
customer_idemailregistration_datecountry
101john.doe@test.com10/05/2020USA
103sam.fisher@fake.com01/06/2021UK
104alex.mason@fraud.com20/02/2021Australia

This can be done by using the keyword in SQL to match a specific pattern or string in the field.

This SQL query will return all the records from the table except those records where the field ends with , , or . The percentage sign denotes wildcard in SQL that matches any sequence of characters.

Make sure to sysnthesise the results and communicate your findings effectively to the relevant stakeholders.

### Preparing For The Criteo SQL Interview

The best way to prepare for a SQL interview, besides making sure you have strong SQL fundamentals, is to practice a ton of real SQL questions that were asked in recent job interviews. In addition to solving the earlier Criteo SQL interview questions, you should also solve the 200+ SQL questions from real Data Science & Analytics interviews which come from companies like Google, Microsoft and Silicon Valley startups.

Each problem on DataLemur has hints to guide you, detailed solutions and crucially, there is an online SQL code editor so you can instantly run your query and have it checked.

To prep for the Criteo SQL interview it is also wise to practice SQL problems from other tech companies like:

But if your SQL skills are weak, forget about jumping right into solving questions – improve your SQL foundations with this SQL tutorial for Data Scientists & Analysts.

This tutorial covers things like turning a subquery into a CTE and SUM/AVG window functions – both of these pop up often during Criteo interviews.

### Criteo Data Science Interview Tips

#### What Do Criteo Data Science Interviews Cover?

Beyond writing SQL queries, the other types of problems to prepare for the Criteo Data Science Interview include:

• Probability & Statistics Questions
• Coding Questions in Python or R
• Analytics and Product-Metrics Questions
• Machine Learning and Predictive Modeling Questions
• Behavioral Interview Questions

#### How To Prepare for Criteo Data Science Interviews?

The best way to prep for Criteo Data Science interviews is to read a Criteo employee's account of what they do day-to-day so you have a sense of the job. The next best thing to read is the book Ace the Data Science Interview.

The book covers 201 interview questions sourced from tech companies like Google & Microsoft. It also has a refresher on Stats, ML, & Data Case Studies. And finally it's helped a TON of people, which is how it's gotten to be an Amazon best-seller with over 1000+ 5-star reviews.